18 #ifndef UA_DYNAMIC_LINKING_EXPORT 19 # define UA_DYNAMIC_LINKING_EXPORT 110 #if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC)) 111 #define _Q_INVALIDATE(a) (a) = ((void *)-1) 113 #define _Q_INVALIDATE(a) 119 #define SLIST_HEAD(name, type) \ 121 struct type *slh_first; \ 124 #define SLIST_HEAD_INITIALIZER(head) \ 132 #define SLIST_ENTRY(type) \ 134 struct type *sle_next; \ 140 #define SLIST_FIRST(head) ((head)->slh_first) 141 #define SLIST_END(head) NULL 142 #define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) 143 #define SLIST_NEXT(elm, field) ((elm)->field.sle_next) 145 #define SLIST_FOREACH(var, head, field) \ 146 for((var) = SLIST_FIRST(head); \ 147 (var) != SLIST_END(head); \ 148 (var) = SLIST_NEXT(var, field)) 150 #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ 151 for ((var) = SLIST_FIRST(head); \ 152 (var) && ((tvar) = SLIST_NEXT(var, field), 1); \ 158 #define SLIST_INIT(head) { \ 159 SLIST_FIRST(head) = SLIST_END(head); \ 162 #define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ 163 (elm)->field.sle_next = (slistelm)->field.sle_next; \ 164 (slistelm)->field.sle_next = (elm); \ 167 #define SLIST_INSERT_HEAD(head, elm, field) do { \ 168 (elm)->field.sle_next = (head)->slh_first; \ 169 (head)->slh_first = (elm); \ 172 #define SLIST_REMOVE_AFTER(elm, field) do { \ 173 (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ 176 #define SLIST_REMOVE_HEAD(head, field) do { \ 177 (head)->slh_first = (head)->slh_first->field.sle_next; \ 180 #define SLIST_REMOVE(head, elm, type, field) do { \ 181 if ((head)->slh_first == (elm)) { \ 182 SLIST_REMOVE_HEAD((head), field); \ 184 struct type *curelm = (head)->slh_first; \ 186 while (curelm->field.sle_next != (elm)) \ 187 curelm = curelm->field.sle_next; \ 188 curelm->field.sle_next = \ 189 curelm->field.sle_next->field.sle_next; \ 190 _Q_INVALIDATE((elm)->field.sle_next); \ 197 #define LIST_HEAD(name, type) \ 199 struct type *lh_first; \ 202 #define LIST_HEAD_INITIALIZER(head) \ 205 #define LIST_ENTRY(type) \ 207 struct type *le_next; \ 208 struct type **le_prev; \ 214 #define LIST_FIRST(head) ((head)->lh_first) 215 #define LIST_END(head) NULL 216 #define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) 217 #define LIST_NEXT(elm, field) ((elm)->field.le_next) 219 #define LIST_FOREACH(var, head, field) \ 220 for((var) = LIST_FIRST(head); \ 221 (var)!= LIST_END(head); \ 222 (var) = LIST_NEXT(var, field)) 224 #define LIST_FOREACH_SAFE(var, head, field, tvar) \ 225 for ((var) = LIST_FIRST(head); \ 226 (var) && ((tvar) = LIST_NEXT(var, field), 1); \ 232 #define LIST_INIT(head) do { \ 233 LIST_FIRST(head) = LIST_END(head); \ 236 #define LIST_INSERT_AFTER(listelm, elm, field) do { \ 237 if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ 238 (listelm)->field.le_next->field.le_prev = \ 239 &(elm)->field.le_next; \ 240 (listelm)->field.le_next = (elm); \ 241 (elm)->field.le_prev = &(listelm)->field.le_next; \ 244 #define LIST_INSERT_BEFORE(listelm, elm, field) do { \ 245 (elm)->field.le_prev = (listelm)->field.le_prev; \ 246 (elm)->field.le_next = (listelm); \ 247 *(listelm)->field.le_prev = (elm); \ 248 (listelm)->field.le_prev = &(elm)->field.le_next; \ 251 #define LIST_INSERT_HEAD(head, elm, field) do { \ 252 if (((elm)->field.le_next = (head)->lh_first) != NULL) \ 253 (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ 254 (head)->lh_first = (elm); \ 255 (elm)->field.le_prev = &(head)->lh_first; \ 258 #define LIST_REMOVE(elm, field) do { \ 259 if ((elm)->field.le_next != NULL) \ 260 (elm)->field.le_next->field.le_prev = \ 261 (elm)->field.le_prev; \ 262 *(elm)->field.le_prev = (elm)->field.le_next; \ 263 _Q_INVALIDATE((elm)->field.le_prev); \ 264 _Q_INVALIDATE((elm)->field.le_next); \ 267 #define LIST_REPLACE(elm, elm2, field) do { \ 268 if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ 269 (elm2)->field.le_next->field.le_prev = \ 270 &(elm2)->field.le_next; \ 271 (elm2)->field.le_prev = (elm)->field.le_prev; \ 272 *(elm2)->field.le_prev = (elm2); \ 273 _Q_INVALIDATE((elm)->field.le_prev); \ 274 _Q_INVALIDATE((elm)->field.le_next); \ 280 #define SIMPLEQ_HEAD(name, type) \ 282 struct type *sqh_first; \ 283 struct type **sqh_last; \ 286 #define SIMPLEQ_HEAD_INITIALIZER(head) \ 287 { NULL, &(head).sqh_first } 289 #define SIMPLEQ_ENTRY(type) \ 291 struct type *sqe_next; \ 297 #define SIMPLEQ_FIRST(head) ((head)->sqh_first) 298 #define SIMPLEQ_END(head) NULL 299 #define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) 300 #define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) 302 #define SIMPLEQ_FOREACH(var, head, field) \ 303 for((var) = SIMPLEQ_FIRST(head); \ 304 (var) != SIMPLEQ_END(head); \ 305 (var) = SIMPLEQ_NEXT(var, field)) 307 #define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 308 for ((var) = SIMPLEQ_FIRST(head); \ 309 (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \ 315 #define SIMPLEQ_INIT(head) do { \ 316 (head)->sqh_first = NULL; \ 317 (head)->sqh_last = &(head)->sqh_first; \ 320 #define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 321 if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ 322 (head)->sqh_last = &(elm)->field.sqe_next; \ 323 (head)->sqh_first = (elm); \ 326 #define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 327 (elm)->field.sqe_next = NULL; \ 328 *(head)->sqh_last = (elm); \ 329 (head)->sqh_last = &(elm)->field.sqe_next; \ 332 #define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 333 if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ 334 (head)->sqh_last = &(elm)->field.sqe_next; \ 335 (listelm)->field.sqe_next = (elm); \ 338 #define SIMPLEQ_REMOVE_HEAD(head, field) do { \ 339 if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ 340 (head)->sqh_last = &(head)->sqh_first; \ 343 #define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 344 if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \ 346 (head)->sqh_last = &(elm)->field.sqe_next; \ 352 #define XSIMPLEQ_HEAD(name, type) \ 354 struct type *sqx_first; \ 355 struct type **sqx_last; \ 356 unsigned long sqx_cookie; \ 359 #define XSIMPLEQ_ENTRY(type) \ 361 struct type *sqx_next; \ 367 #define XSIMPLEQ_XOR(head, ptr) ((__typeof(ptr))((head)->sqx_cookie ^ \ 368 (unsigned long)(ptr))) 369 #define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first)) 370 #define XSIMPLEQ_END(head) NULL 371 #define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head)) 372 #define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next)) 375 #define XSIMPLEQ_FOREACH(var, head, field) \ 376 for ((var) = XSIMPLEQ_FIRST(head); \ 377 (var) != XSIMPLEQ_END(head); \ 378 (var) = XSIMPLEQ_NEXT(head, var, field)) 380 #define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 381 for ((var) = XSIMPLEQ_FIRST(head); \ 382 (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1); \ 388 #define XSIMPLEQ_INIT(head) do { \ 389 arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \ 390 (head)->sqx_first = XSIMPLEQ_XOR(head, NULL); \ 391 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 394 #define XSIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 395 if (((elm)->field.sqx_next = (head)->sqx_first) == \ 396 XSIMPLEQ_XOR(head, NULL)) \ 397 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 398 (head)->sqx_first = XSIMPLEQ_XOR(head, (elm)); \ 401 #define XSIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 402 (elm)->field.sqx_next = XSIMPLEQ_XOR(head, NULL); \ 403 *(XSIMPLEQ_XOR(head, (head)->sqx_last)) = XSIMPLEQ_XOR(head, (elm)); \ 404 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 407 #define XSIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 408 if (((elm)->field.sqx_next = (listelm)->field.sqx_next) == \ 409 XSIMPLEQ_XOR(head, NULL)) \ 410 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 411 (listelm)->field.sqx_next = XSIMPLEQ_XOR(head, (elm)); \ 414 #define XSIMPLEQ_REMOVE_HEAD(head, field) do { \ 415 if (((head)->sqx_first = XSIMPLEQ_XOR(head, \ 416 (head)->sqx_first)->field.sqx_next) == XSIMPLEQ_XOR(head, NULL)) \ 417 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 420 #define XSIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 421 if (((elm)->field.sqx_next = XSIMPLEQ_XOR(head, \ 422 (elm)->field.sqx_next)->field.sqx_next) \ 423 == XSIMPLEQ_XOR(head, NULL)) \ 425 XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 432 #define TAILQ_HEAD(name, type) \ 434 struct type *tqh_first; \ 435 struct type **tqh_last; \ 438 #define TAILQ_HEAD_INITIALIZER(head) \ 439 { NULL, &(head).tqh_first } 441 #define TAILQ_ENTRY(type) \ 443 struct type *tqe_next; \ 444 struct type **tqe_prev; \ 450 #define TAILQ_FIRST(head) ((head)->tqh_first) 451 #define TAILQ_END(head) NULL 452 #define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) 453 #define TAILQ_LAST(head, headname) \ 454 (*(((struct headname *)((head)->tqh_last))->tqh_last)) 456 #define TAILQ_PREV(elm, headname, field) \ 457 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) 458 #define TAILQ_EMPTY(head) \ 459 (TAILQ_FIRST(head) == TAILQ_END(head)) 461 #define TAILQ_FOREACH(var, head, field) \ 462 for((var) = TAILQ_FIRST(head); \ 463 (var) != TAILQ_END(head); \ 464 (var) = TAILQ_NEXT(var, field)) 466 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ 467 for ((var) = TAILQ_FIRST(head); \ 468 (var) != TAILQ_END(head) && \ 469 ((tvar) = TAILQ_NEXT(var, field), 1); \ 473 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ 474 for((var) = TAILQ_LAST(head, headname); \ 475 (var) != TAILQ_END(head); \ 476 (var) = TAILQ_PREV(var, headname, field)) 478 #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 479 for ((var) = TAILQ_LAST(head, headname); \ 480 (var) != TAILQ_END(head) && \ 481 ((tvar) = TAILQ_PREV(var, headname, field), 1); \ 487 #define TAILQ_INIT(head) do { \ 488 (head)->tqh_first = NULL; \ 489 (head)->tqh_last = &(head)->tqh_first; \ 492 #define TAILQ_INSERT_HEAD(head, elm, field) do { \ 493 if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ 494 (head)->tqh_first->field.tqe_prev = \ 495 &(elm)->field.tqe_next; \ 497 (head)->tqh_last = &(elm)->field.tqe_next; \ 498 (head)->tqh_first = (elm); \ 499 (elm)->field.tqe_prev = &(head)->tqh_first; \ 502 #define TAILQ_INSERT_TAIL(head, elm, field) do { \ 503 (elm)->field.tqe_next = NULL; \ 504 (elm)->field.tqe_prev = (head)->tqh_last; \ 505 *(head)->tqh_last = (elm); \ 506 (head)->tqh_last = &(elm)->field.tqe_next; \ 509 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ 510 if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ 511 (elm)->field.tqe_next->field.tqe_prev = \ 512 &(elm)->field.tqe_next; \ 514 (head)->tqh_last = &(elm)->field.tqe_next; \ 515 (listelm)->field.tqe_next = (elm); \ 516 (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ 519 #define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ 520 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ 521 (elm)->field.tqe_next = (listelm); \ 522 *(listelm)->field.tqe_prev = (elm); \ 523 (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ 526 #define TAILQ_REMOVE(head, elm, field) do { \ 527 if (((elm)->field.tqe_next) != NULL) \ 528 (elm)->field.tqe_next->field.tqe_prev = \ 529 (elm)->field.tqe_prev; \ 531 (head)->tqh_last = (elm)->field.tqe_prev; \ 532 *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ 533 _Q_INVALIDATE((elm)->field.tqe_prev); \ 534 _Q_INVALIDATE((elm)->field.tqe_next); \ 537 #define TAILQ_REPLACE(head, elm, elm2, field) do { \ 538 if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ 539 (elm2)->field.tqe_next->field.tqe_prev = \ 540 &(elm2)->field.tqe_next; \ 542 (head)->tqh_last = &(elm2)->field.tqe_next; \ 543 (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ 544 *(elm2)->field.tqe_prev = (elm2); \ 545 _Q_INVALIDATE((elm)->field.tqe_prev); \ 546 _Q_INVALIDATE((elm)->field.tqe_next); \ 552 #define CIRCLEQ_HEAD(name, type) \ 554 struct type *cqh_first; \ 555 struct type *cqh_last; \ 558 #define CIRCLEQ_HEAD_INITIALIZER(head) \ 559 { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } 561 #define CIRCLEQ_ENTRY(type) \ 563 struct type *cqe_next; \ 564 struct type *cqe_prev; \ 570 #define CIRCLEQ_FIRST(head) ((head)->cqh_first) 571 #define CIRCLEQ_LAST(head) ((head)->cqh_last) 572 #define CIRCLEQ_END(head) ((void *)(head)) 573 #define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) 574 #define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) 575 #define CIRCLEQ_EMPTY(head) \ 576 (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) 578 #define CIRCLEQ_FOREACH(var, head, field) \ 579 for((var) = CIRCLEQ_FIRST(head); \ 580 (var) != CIRCLEQ_END(head); \ 581 (var) = CIRCLEQ_NEXT(var, field)) 583 #define CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \ 584 for ((var) = CIRCLEQ_FIRST(head); \ 585 (var) != CIRCLEQ_END(head) && \ 586 ((tvar) = CIRCLEQ_NEXT(var, field), 1); \ 589 #define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ 590 for((var) = CIRCLEQ_LAST(head); \ 591 (var) != CIRCLEQ_END(head); \ 592 (var) = CIRCLEQ_PREV(var, field)) 594 #define CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 595 for ((var) = CIRCLEQ_LAST(head, headname); \ 596 (var) != CIRCLEQ_END(head) && \ 597 ((tvar) = CIRCLEQ_PREV(var, headname, field), 1); \ 603 #define CIRCLEQ_INIT(head) do { \ 604 (head)->cqh_first = CIRCLEQ_END(head); \ 605 (head)->cqh_last = CIRCLEQ_END(head); \ 608 #define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 609 (elm)->field.cqe_next = (listelm)->field.cqe_next; \ 610 (elm)->field.cqe_prev = (listelm); \ 611 if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ 612 (head)->cqh_last = (elm); \ 614 (listelm)->field.cqe_next->field.cqe_prev = (elm); \ 615 (listelm)->field.cqe_next = (elm); \ 618 #define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ 619 (elm)->field.cqe_next = (listelm); \ 620 (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ 621 if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ 622 (head)->cqh_first = (elm); \ 624 (listelm)->field.cqe_prev->field.cqe_next = (elm); \ 625 (listelm)->field.cqe_prev = (elm); \ 628 #define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ 629 (elm)->field.cqe_next = (head)->cqh_first; \ 630 (elm)->field.cqe_prev = CIRCLEQ_END(head); \ 631 if ((head)->cqh_last == CIRCLEQ_END(head)) \ 632 (head)->cqh_last = (elm); \ 634 (head)->cqh_first->field.cqe_prev = (elm); \ 635 (head)->cqh_first = (elm); \ 638 #define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ 639 (elm)->field.cqe_next = CIRCLEQ_END(head); \ 640 (elm)->field.cqe_prev = (head)->cqh_last; \ 641 if ((head)->cqh_first == CIRCLEQ_END(head)) \ 642 (head)->cqh_first = (elm); \ 644 (head)->cqh_last->field.cqe_next = (elm); \ 645 (head)->cqh_last = (elm); \ 648 #define CIRCLEQ_REMOVE(head, elm, field) do { \ 649 if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ 650 (head)->cqh_last = (elm)->field.cqe_prev; \ 652 (elm)->field.cqe_next->field.cqe_prev = \ 653 (elm)->field.cqe_prev; \ 654 if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ 655 (head)->cqh_first = (elm)->field.cqe_next; \ 657 (elm)->field.cqe_prev->field.cqe_next = \ 658 (elm)->field.cqe_next; \ 659 _Q_INVALIDATE((elm)->field.cqe_prev); \ 660 _Q_INVALIDATE((elm)->field.cqe_next); \ 663 #define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ 664 if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ 666 (head)->cqh_last = (elm2); \ 668 (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ 669 if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ 671 (head)->cqh_first = (elm2); \ 673 (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ 674 _Q_INVALIDATE((elm)->field.cqe_prev); \ 675 _Q_INVALIDATE((elm)->field.cqe_next); \ 716 #define PCG32_INITIALIZER { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL } 744 #define UA_assert(ignore) assert(ignore) 749 #define container_of(ptr, type, member) \ 750 (type *)((uintptr_t)ptr - offsetof(type,member)) 758 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 759 # define UA_THREAD_LOCAL _Thread_local 760 #elif defined(__GNUC__) 761 # define UA_THREAD_LOCAL __thread 762 #elif defined(_MSC_VER) 763 # define UA_THREAD_LOCAL __declspec(thread) 765 # warning The compiler does not support thread-local variables 766 # define UA_THREAD_LOCAL 788 #ifndef UA_ENABLE_MULTITHREADING 789 # define UA_atomic_sync() 792 # define UA_atomic_sync() _ReadWriteBarrier() 794 # define UA_atomic_sync() __sync_synchronize() 799 UA_atomic_xchg(
void *
volatile * addr,
void *newptr) {
800 #ifndef UA_ENABLE_MULTITHREADING 806 return _InterlockedExchangePointer(addr, newptr);
808 return __sync_lock_test_and_set(addr, newptr);
814 UA_atomic_cmpxchg(
void *
volatile * addr,
void *expected,
void *newptr) {
815 #ifndef UA_ENABLE_MULTITHREADING 817 if(old == expected) {
823 return _InterlockedCompareExchangePointer(addr, expected, newptr);
825 return __sync_val_compare_and_swap(addr, expected, newptr);
831 UA_atomic_add(
volatile uint32_t *addr, uint32_t increase) {
832 #ifndef UA_ENABLE_MULTITHREADING 837 return _InterlockedExchangeAdd(addr, increase) + increase;
839 return __sync_add_and_fetch(addr, increase);
2518 #define UA_TRANSPORT_COUNT 12 2530 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY 0 2542 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER 1 2557 #define UA_TRANSPORT_TCPHELLOMESSAGE 2 2568 #define UA_TRANSPORT_TCPERRORMESSAGE 3 2585 #define UA_TRANSPORT_MESSAGETYPE 4 2597 #define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER 5 2611 #define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE 6 2622 #define UA_TRANSPORT_SEQUENCEHEADER 7 2633 #define UA_TRANSPORT_TCPMESSAGEHEADER 8 2647 #define UA_TRANSPORT_CHUNKTYPE 9 2657 #define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER 10 2668 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER 11 2686 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2687 # pragma GCC diagnostic push 2688 # pragma GCC diagnostic ignored "-Wmissing-field-initializers" 2689 # pragma GCC diagnostic ignored "-Wmissing-braces" 2700 UA_SecureConversationMessageAbortBody_new(
void) {
2726 UA_SecureConversationMessageFooter_new(
void) {
2752 UA_TcpHelloMessage_new(
void) {
2778 UA_TcpErrorMessage_new(
void) {
2804 UA_MessageType_new(
void) {
2829 UA_AsymmetricAlgorithmSecurityHeader_new(
void) {
2855 UA_TcpAcknowledgeMessage_new(
void) {
2880 UA_SequenceHeader_new(
void) {
2905 UA_TcpMessageHeader_new(
void) {
2930 UA_ChunkType_new(
void) {
2955 UA_SymmetricAlgorithmSecurityHeader_new(
void) {
2980 UA_SecureConversationMessageHeader_new(
void) {
2998 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2999 # pragma GCC diagnostic pop 3195 const char ** port,
const char ** path);
3260 const void *content,
const UA_DataType *contentType);
3279 #define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3280 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3281 ((CHANNEL)->connection ? CHANNEL->connection->sockfd : 0), \ 3282 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3284 #define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3285 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3286 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3287 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3289 #define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3290 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3291 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3292 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3294 #define UA_LOG_WARNING_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3295 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3296 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3297 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3299 #define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3300 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3301 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3302 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3304 #define UA_LOG_FATAL_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3305 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3306 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3307 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3359 #define UA_NODE_BASEATTRIBUTES \ 3361 UA_NodeClass nodeClass; \ 3362 UA_QualifiedName browseName; \ 3363 UA_LocalizedText displayName; \ 3364 UA_LocalizedText description; \ 3365 UA_UInt32 writeMask; \ 3366 UA_UInt32 userWriteMask; \ 3367 size_t referencesSize; \ 3368 UA_ReferenceNode *references; 3446 #define UA_NODE_VARIABLEATTRIBUTES \ 3448 UA_NodeId dataType; \ 3449 UA_Int32 valueRank; \ 3450 size_t arrayDimensionsSize; \ 3451 UA_UInt32 *arrayDimensions; \ 3454 UA_ValueSource valueSource; \ 3457 UA_DataValue value; \ 3458 UA_ValueCallback callback; \ 3460 UA_DataSource dataSource; \ 3707 #define UA_MAXCONTINUATIONPOINTS 5 3720 #ifdef UA_ENABLE_SUBSCRIPTIONS 3721 typedef struct UA_PublishResponseEntry {
3725 } UA_PublishResponseEntry;
3741 #ifdef UA_ENABLE_SUBSCRIPTIONS 3744 SIMPLEQ_HEAD(UA_ListOfQueuedPublishResponses, UA_PublishResponseEntry) responseQueue;
3758 #ifdef UA_ENABLE_SUBSCRIPTIONS 3769 UA_Session_getUniqueSubscriptionID(
UA_Session *session);
3776 #define UA_LOG_TRACE_SESSION(LOGGER, SESSION, MSG, ...) \ 3777 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3778 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3779 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3780 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3783 #define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG, ...) \ 3784 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3785 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3786 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3787 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3790 #define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG, ...) \ 3791 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3792 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3793 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3794 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3797 #define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG, ...) \ 3798 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3799 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3800 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3801 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3804 #define UA_LOG_ERROR_SESSION(LOGGER, SESSION, MSG, ...) \ 3805 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3806 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3807 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3808 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3811 #define UA_LOG_FATAL_SESSION(LOGGER, SESSION, MSG, ...) \ 3812 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3813 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3814 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3815 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3910 UA_SubscriptionState
state;
3990 #define UA_NodeStore_newObjectNode() \ 3991 (UA_ObjectNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECT) 3992 #define UA_NodeStore_newMethodNode() \ 3993 (UA_MethodNode*)UA_NodeStore_newNode(UA_NODECLASS_METHOD) 3994 #define UA_NodeStore_newObjectTypeNode() \ 3995 (UA_ObjectTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECTTYPE) 3996 #define UA_NodeStore_newVariableTypeNode() \ 3997 (UA_VariableTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_VARIABLETYPE) 3998 #define UA_NodeStore_newReferenceTypeNode() \ 3999 (UA_ReferenceTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_REFERENCETYPE) 4000 #define UA_NodeStore_newDataTypeNode() \ 4001 (UA_DataTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_DATATYPE) 4002 #define UA_NodeStore_newViewNode() \ 4003 (UA_ViewNode*)UA_NodeStore_newNode(UA_NODECLASS_VIEW) 4008 UA_NodeStore_newVariableNode(
void) {
4158 #define ANONYMOUS_POLICY "open62541-anonymous-policy" 4159 #define USERNAME_POLICY "open62541-username-policy" 4166 #ifdef UA_ENABLE_MULTITHREADING 4167 # define _LGPL_SOURCE 4169 # include <urcu/lfstack.h> 4171 # define UA_RCU_LOCK() rcu_read_lock() 4172 # define UA_RCU_UNLOCK() rcu_read_unlock() 4173 # define UA_ASSERT_RCU_LOCKED() 4174 # define UA_ASSERT_RCU_UNLOCKED() 4177 # define UA_ASSERT_RCU_LOCKED() assert(rcu_locked) 4178 # define UA_ASSERT_RCU_UNLOCKED() assert(!rcu_locked) 4179 # define UA_RCU_LOCK() do { \ 4180 UA_ASSERT_RCU_UNLOCKED(); \ 4181 rcu_locked = true; \ 4182 rcu_read_lock(); } while(0) 4183 # define UA_RCU_UNLOCK() do { \ 4184 UA_ASSERT_RCU_LOCKED(); \ 4185 rcu_locked = false; \ 4186 rcu_read_unlock(); } while(0) 4189 # define UA_RCU_LOCK() 4190 # define UA_RCU_UNLOCK() 4191 # define UA_ASSERT_RCU_LOCKED() 4192 # define UA_ASSERT_RCU_UNLOCKED() 4196 #ifdef UA_ENABLE_MULTITHREADING 4202 char padding[64 -
sizeof(
void*) -
sizeof(pthread_t) -
4207 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 4232 #ifndef UA_ENABLE_MULTITHREADING 4236 struct cds_wfcq_head dispatchQueue_head;
4238 struct cds_lfs_stack mainLoopJobs;
4240 struct DelayedJobs *delayedJobs;
4241 pthread_cond_t dispatchQueue_condition;
4242 pthread_mutex_t dispatchQueue_mutex;
4243 struct cds_wfcq_tail dispatchQueue_tail;
4283 UA_InstantiationCallback *instantiationCallback,
4310 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize);
4316 size_t referenceTypeIdsSize);
4319 getNodeType(UA_Server *server,
const UA_Node *node);
4330 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
4340 const UA_UInt32 *constraintArrayDimensions,
4341 size_t testArrayDimensionsSize,
4407 const void *request,
void *response);
4461 UA_Session *session,
4562 void Service_Read(UA_Server *server, UA_Session *session,
4589 void Service_Call(UA_Server *server, UA_Session *session,
4689 #ifdef UA_ENABLE_SUBSCRIPTIONS 4691 typedef struct UA_Client_NotificationsAckNumber {
4692 LIST_ENTRY(UA_Client_NotificationsAckNumber) listEntry;
4694 } UA_Client_NotificationsAckNumber;
4696 typedef struct UA_Client_MonitoredItem {
4697 LIST_ENTRY(UA_Client_MonitoredItem) listEntry;
4707 void *handlerContext;
4708 } UA_Client_MonitoredItem;
4710 typedef struct UA_Client_Subscription {
4711 LIST_ENTRY(UA_Client_Subscription) listEntry;
4718 LIST_HEAD(UA_ListOfClientMonitoredItems, UA_Client_MonitoredItem) monitoredItems;
4719 } UA_Client_Subscription;
4721 void UA_Client_Subscriptions_forceDelete(
UA_Client *client, UA_Client_Subscription *sub);
4759 #ifdef UA_ENABLE_SUBSCRIPTIONS 4761 LIST_HEAD(ListOfUnacknowledgedNotifications, UA_Client_NotificationsAckNumber) pendingNotificationsAcks;
4762 LIST_HEAD(ListOfClientSubscriptionItems, UA_Client_Subscription) subscriptions;
4822 static void deleteMembers_noInit(
void *p,
const UA_DataType *type);
4828 size_t length = strlen(src);
4836 memcpy(str.
data, src, length);
4847 return (is == 0) ? true :
false;
4865 time_t secSinceUnixEpoch =
4868 memset(&ts, 0,
sizeof(
struct tm));
4876 return dateTimeStruct;
4881 for(
size_t i = digits; i > 0; --i) {
4882 pos[i-1] = (
UA_Byte)((n % 10) +
'0');
4897 printNumber(tSt.
day, &str.
data[3], 2);
4899 printNumber(tSt.
year, &str.
data[6], 4);
4901 printNumber(tSt.
hour, &str.
data[11], 2);
4903 printNumber(tSt.
min, &str.
data[14], 2);
4905 printNumber(tSt.
sec, &str.
data[17], 2);
4918 if(memcmp(g1, g2,
sizeof(
UA_Guid)) == 0)
4946 UA_ByteString_init(bs);
5044 #define FNV_PRIME_32 16777619 5047 for(
size_t i = 0; i < size; ++i) {
5048 fnv = fnv ^ (buf[i]);
5071 NodeId_deleteMembers(&p->
nodeId, _);
5149 if(UA_Variant_isScalar(src))
5222 size_t *total,
size_t *block,
size_t *stride,
size_t *first) {
5224 #if(MAX_SIZE > 0xffffffff) 5233 size_t dims_count = 1;
5235 size_t elements = 1;
5238 for(
size_t i = 0; i < dims_count; ++i)
5239 elements *= dims[i];
5255 for(
size_t i = 0; i < dims_count; ++i) {
5264 realmax[i] = dims[i] - 1;
5275 size_t running_dimssize = 1;
5277 for(
size_t k = dims_count; k > 0;) {
5280 if(!found_contiguous && dimrange != dims[k]) {
5282 found_contiguous =
true;
5283 *block = running_dimssize * dimrange;
5284 *stride = running_dimssize * dims[k];
5287 running_dimssize *= dims[k];
5313 length = dim->
max - dim->
min + 1;
5328 UA_Boolean isScalar = UA_Variant_isScalar(src);
5360 size_t count, block, stride, first;
5361 UA_StatusCode retval = computeStrides(src, thisrange, &count,
5362 &block, &stride, &first);
5367 UA_Variant_init(dst);
5373 size_t block_count = count / block;
5375 uintptr_t nextdst = (uintptr_t)dst->
data;
5376 uintptr_t nextsrc = (uintptr_t)src->
data + (elem_size * first);
5380 for(
size_t i = 0; i < block_count; ++i) {
5381 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5382 nextdst += block * elem_size;
5383 nextsrc += stride * elem_size;
5386 for(
size_t i = 0; i < block_count; ++i) {
5387 for(
size_t j = 0; j < block; ++j) {
5388 retval =
UA_copy((
const void*)nextsrc,
5389 (
void*)nextdst, src->
type);
5390 nextdst += elem_size;
5391 nextsrc += elem_size;
5393 nextsrc += (stride - block) * elem_size;
5407 for(
size_t i = 0; i < block_count; ++i) {
5410 retval = copySubString((
const UA_String*)nextsrc,
5417 nextdst += elem_size;
5418 nextsrc += elem_size;
5420 nextsrc += (stride - block) * elem_size;
5442 Variant_deletemembers(dst,
NULL);
5456 Variant_setRange(
UA_Variant *v,
void *array,
size_t arraySize,
5459 size_t count, block, stride, first;
5461 &block, &stride, &first);
5464 if(count != arraySize)
5468 size_t block_count = count / block;
5470 uintptr_t nextdst = (uintptr_t)v->
data + (first * elem_size);
5471 uintptr_t nextsrc = (uintptr_t)array;
5473 for(
size_t i = 0; i < block_count; ++i) {
5474 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5475 nextsrc += block * elem_size;
5476 nextdst += stride * elem_size;
5479 for(
size_t i = 0; i < block_count; ++i) {
5480 for(
size_t j = 0; j < block; ++j) {
5481 deleteMembers_noInit((
void*)nextdst, v->
type);
5482 retval |=
UA_copy((
void*)nextsrc, (
void*)nextdst, v->
type);
5483 nextdst += elem_size;
5484 nextsrc += elem_size;
5486 nextdst += (stride - block) * elem_size;
5492 memset(array, 0,
sizeof(elem_size)*arraySize);
5500 return Variant_setRange(v, array, arraySize, range,
false);
5506 return Variant_setRange(v, (
void*)(uintptr_t)array,
5507 arraySize, range,
true);
5514 String_deleteMembers(&p->
text,
NULL);
5521 retval |= UA_String_copy(&src->
text, &dst->
text);
5535 UA_Variant_init(&dst->
value);
5538 DataValue_deleteMembers(dst,
NULL);
5648 copy_noInit(
const void *src,
void *dst,
const UA_DataType *type) {
5650 uintptr_t ptrs = (uintptr_t)src;
5651 uintptr_t ptrd = (uintptr_t)dst;
5653 for(
size_t i = 0; i < membersSize; ++i) {
5661 retval |= copyJumpTable[fi]((
const void*)ptrs, (
void*)ptrd, mt);
5667 size_t *dst_size = (
size_t*)ptrd;
5668 const size_t size = *((
const size_t*)ptrs);
5669 ptrs +=
sizeof(size_t);
5670 ptrd +=
sizeof(size_t);
5671 retval |=
UA_Array_copy(*(
void*
const*)ptrs, size, (
void**)ptrd, mt);
5676 ptrs +=
sizeof(
void*);
5677 ptrd +=
sizeof(
void*);
5685 memset(dst, 0, type->
memSize);
5692 static void nopDeleteMembers(
void *p,
const UA_DataType *type) { }
5727 deleteMembers_noInit(
void *p,
const UA_DataType *type) {
5728 uintptr_t ptr = (uintptr_t)p;
5730 for(
size_t i = 0; i < membersSize; ++i) {
5737 deleteMembersJumpTable[fi]((
void*)ptr, mt);
5741 size_t length = *(
size_t*)ptr;
5742 ptr +=
sizeof(size_t);
5744 ptr +=
sizeof(
void*);
5751 deleteMembers_noInit(p, type);
5757 deleteMembers_noInit(p, type);
5792 memcpy(*dst, src, type->
memSize * size);
5796 uintptr_t ptrs = (uintptr_t)src;
5797 uintptr_t ptrd = (uintptr_t)*dst;
5799 for(
size_t i = 0; i < size; ++i) {
5800 retval |=
UA_copy((
void*)ptrs, (
void*)ptrd, type);
5814 uintptr_t ptr = (uintptr_t)p;
5815 for(
size_t i = 0; i < size; ++i) {
5845 #if defined(__clang__) 5846 # pragma GCC diagnostic push 5847 # pragma GCC diagnostic warning "-W#warnings" 5850 #ifndef UA_BINARY_OVERLAYABLE_INTEGER 5851 # warning Integer endianness could not be detected to be little endian. Use slow generic encoding. 5856 #ifndef UA_BINARY_OVERLAYABLE_FLOAT 5857 # warning Float endianness could not be detected to be little endian in the IEEE 754 format. Use slow generic encoding. 5860 #if defined(__clang__) 5861 # pragma GCC diagnostic pop 5909 exchangeBuffer(
void) {
5910 if(!g_exchangeBufferCallback)
5915 void *store_exchangeBufferCallbackHandle = g_exchangeBufferCallbackHandle;
5917 size_t offset = (uintptr_t)(g_pos - g_buf.data);
5919 status ret = g_exchangeBufferCallback(g_exchangeBufferCallbackHandle, &buf, offset);
5922 g_exchangeBufferCallback = store_exchangeBufferCallback;
5923 g_exchangeBufferCallbackHandle = store_exchangeBufferCallbackHandle;
5934 #if !UA_BINARY_OVERLAYABLE_INTEGER 5938 UA_encode16(
const u16 v,
u8 buf[2]) {
5940 buf[1] = (
u8)(v >> 8);
5944 UA_decode16(
const u8 buf[2],
u16 *v) {
5945 *v = (
u16)((
u16)buf[0] + (((
u16)buf[1]) << 8));
5949 UA_encode32(
const u32 v,
u8 buf[4]) {
5951 buf[1] = (
u8)(v >> 8);
5952 buf[2] = (
u8)(v >> 16);
5953 buf[3] = (
u8)(v >> 24);
5957 UA_decode32(
const u8 buf[4],
u32 *v) {
5959 (((
u32)buf[1]) << 8) +
5960 (((
u32)buf[2]) << 16) +
5961 (((
u32)buf[3]) << 24));
5965 UA_encode64(
const u64 v,
u8 buf[8]) {
5967 buf[1] = (
u8)(v >> 8);
5968 buf[2] = (
u8)(v >> 16);
5969 buf[3] = (
u8)(v >> 24);
5970 buf[4] = (
u8)(v >> 32);
5971 buf[5] = (
u8)(v >> 40);
5972 buf[6] = (
u8)(v >> 48);
5973 buf[7] = (
u8)(v >> 56);
5977 UA_decode64(
const u8 buf[8],
u64 *v) {
5979 (((
u64)buf[1]) << 8) +
5980 (((
u64)buf[2]) << 16) +
5981 (((
u64)buf[3]) << 24) +
5982 (((
u64)buf[4]) << 32) +
5983 (((
u64)buf[5]) << 40) +
5984 (((
u64)buf[6]) << 48) +
5985 (((
u64)buf[7]) << 56));
5992 Boolean_encodeBinary(
const bool *src,
const UA_DataType *_) {
5993 if(g_pos +
sizeof(
bool) > g_end)
5995 *g_pos = *(
const u8*)src;
6001 Boolean_decodeBinary(
bool *dst,
const UA_DataType *_) {
6002 if(g_pos +
sizeof(
bool) > g_end)
6004 *dst = (*g_pos > 0) ?
true :
false;
6012 if(g_pos +
sizeof(
u8) > g_end)
6014 *g_pos = *(
const u8*)src;
6021 if(g_pos +
sizeof(
u8) > g_end)
6031 if(g_pos +
sizeof(
u16) > g_end)
6033 #if UA_BINARY_OVERLAYABLE_INTEGER 6034 memcpy(g_pos, src,
sizeof(
u16));
6036 UA_encode16(*src, g_pos);
6044 if(g_pos +
sizeof(
u16) > g_end)
6046 #if UA_BINARY_OVERLAYABLE_INTEGER 6047 memcpy(dst, g_pos,
sizeof(
u16));
6049 UA_decode16(g_pos, dst);
6058 if(g_pos +
sizeof(
u32) > g_end)
6060 #if UA_BINARY_OVERLAYABLE_INTEGER 6061 memcpy(g_pos, src,
sizeof(
u32));
6063 UA_encode32(*src, g_pos);
6070 Int32_encodeBinary(
i32 const *src) {
6071 return UInt32_encodeBinary((
const u32*)src,
NULL);
6076 if(g_pos +
sizeof(
u32) > g_end)
6078 #if UA_BINARY_OVERLAYABLE_INTEGER 6079 memcpy(dst, g_pos,
sizeof(
u32));
6081 UA_decode32(g_pos, dst);
6088 Int32_decodeBinary(
i32 *dst) {
6089 return UInt32_decodeBinary((
u32*)dst,
NULL);
6093 StatusCode_decodeBinary(
status *dst) {
6094 return UInt32_decodeBinary((
u32*)dst,
NULL);
6100 if(g_pos +
sizeof(
u64) > g_end)
6102 #if UA_BINARY_OVERLAYABLE_INTEGER 6103 memcpy(g_pos, src,
sizeof(
u64));
6105 UA_encode64(*src, g_pos);
6113 if(g_pos +
sizeof(
u64) > g_end)
6115 #if UA_BINARY_OVERLAYABLE_INTEGER 6116 memcpy(dst, g_pos,
sizeof(
u64));
6118 UA_decode64(g_pos, dst);
6126 return UInt64_decodeBinary((
u64*)dst,
NULL);
6133 #if UA_BINARY_OVERLAYABLE_FLOAT 6134 # define Float_encodeBinary UInt32_encodeBinary 6135 # define Float_decodeBinary UInt32_decodeBinary 6136 # define Double_encodeBinary UInt64_encodeBinary 6137 # define Double_decodeBinary UInt64_decodeBinary 6146 pack754(
long double f,
unsigned bits,
unsigned expbits) {
6147 unsigned significandbits = bits - expbits - 1;
6150 if (f < 0) { sign = 1; fnorm = -f; }
6151 else { sign = 0; fnorm = f; }
6153 while(fnorm >= 2.0) { fnorm /= 2.0; ++shift; }
6154 while(fnorm < 1.0) { fnorm *= 2.0; --shift; }
6155 fnorm = fnorm - 1.0;
6156 long long significand = (
long long)(fnorm * ((
float)(1LL<<significandbits) + 0.5f));
6157 long long exponent = shift + ((1<<(expbits-1)) - 1);
6158 return (uint64_t)((sign<<(bits-1)) | (exponent<<(bits-expbits-1)) | significand);
6162 unpack754(uint64_t i,
unsigned bits,
unsigned expbits) {
6163 unsigned significandbits = bits - expbits - 1;
6164 long double result = (
long double)(i&(uint64_t)((1LL<<significandbits)-1));
6165 result /= (1LL<<significandbits);
6167 unsigned bias = (unsigned)(1<<(expbits-1)) - 1;
6168 long long shift = (
long long)((i>>significandbits) & (uint64_t)((1LL<<expbits)-1)) - bias;
6169 while(shift > 0) { result *= 2.0; --shift; }
6170 while(shift < 0) { result /= 2.0; ++shift; }
6171 result *= ((i>>(bits-1))&1)? -1.0: 1.0;
6176 #define FLOAT_NAN 0xffc00000 6177 #define FLOAT_INF 0x7f800000 6178 #define FLOAT_NEG_INF 0xff800000 6179 #define FLOAT_NEG_ZERO 0x80000000 6190 else encoded = (
u32)pack754(f, 32, 8);
6191 return UInt32_encodeBinary(&encoded,
NULL);
6197 status ret = UInt32_decodeBinary(&decoded,
NULL);
6200 if(decoded == 0) *dst = 0.0f;
6202 else if(decoded ==
FLOAT_INF) *dst = INFINITY;
6204 else if((decoded >= 0x7f800001 && decoded <= 0x7fffffff) ||
6205 (decoded >= 0xff800001 && decoded <= 0xffffffff)) *dst = NAN;
6206 else *dst = (
UA_Float)unpack754(decoded, 32, 8);
6211 #define DOUBLE_NAN 0xfff8000000000000L 6212 #define DOUBLE_INF 0x7ff0000000000000L 6213 #define DOUBLE_NEG_INF 0xfff0000000000000L 6214 #define DOUBLE_NEG_ZERO 0x8000000000000000L 6225 else encoded = pack754(d, 64, 11);
6226 return UInt64_encodeBinary(&encoded,
NULL);
6232 status ret = UInt64_decodeBinary(&decoded,
NULL);
6235 if(decoded == 0) *dst = 0.0;
6237 else if(decoded ==
DOUBLE_INF) *dst = INFINITY;
6240 else if((decoded >= 0x7ff0000000000001L && decoded <= 0x7fffffffffffffffL) ||
6241 (decoded >= 0xfff0000000000001L && decoded <= 0xffffffffffffffffL)) *dst = NAN;
6242 else *dst = (
UA_Double)unpack754(decoded, 64, 11);
6251 encodeNumericWithExchangeBuffer(
const void *ptr,
6255 ret = exchangeBuffer();
6258 encodeFunc(ptr,
NULL);
6266 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type);
6273 Array_encodeBinaryOverlayable(uintptr_t ptr,
size_t length,
size_t elementMemSize) {
6275 size_t finished = 0;
6278 while(g_end < g_pos + (elementMemSize * (length-finished))) {
6279 size_t possible = ((uintptr_t)g_end - (uintptr_t)g_pos) / (
sizeof(
u8) * elementMemSize);
6280 size_t possibleMem = possible * elementMemSize;
6281 memcpy(g_pos, (
void*)ptr, possibleMem);
6282 g_pos += possibleMem;
6284 finished += possible;
6285 status ret = exchangeBuffer();
6291 memcpy(g_pos, (
void*)ptr, elementMemSize * (length-finished));
6292 g_pos += elementMemSize * (length-finished);
6297 Array_encodeBinaryComplex(uintptr_t ptr,
size_t length,
const UA_DataType *type) {
6304 for(
size_t i = 0; i < length; ++i) {
6306 status ret = encodeType((
const void*)ptr, type);
6312 ret = exchangeBuffer();
6325 Array_encodeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
6327 i32 signed_length = -1;
6331 signed_length = (
i32)length;
6336 status ret = encodeNumericWithExchangeBuffer(&signed_length,
6345 return Array_encodeBinaryComplex((uintptr_t)src, length, type);
6346 return Array_encodeBinaryOverlayable((uintptr_t)src, length, type->
memSize);
6354 status ret = Int32_decodeBinary(&signed_length);
6359 if(signed_length <= 0) {
6361 if(signed_length < 0)
6371 size_t length = (size_t)signed_length;
6372 if(g_pos + ((type->
memSize * length) / 32) > g_end)
6382 if(g_end < g_pos + (type->
memSize * length)) {
6387 memcpy(*dst, g_pos, type->
memSize * length);
6388 g_pos += type->
memSize * length;
6391 uintptr_t ptr = (uintptr_t)*dst;
6393 for(
size_t i = 0; i < length; ++i) {
6394 ret = decodeBinaryJumpTable[decode_index]((
void*)ptr, type);
6404 *out_length = length;
6436 ret |= UInt16_encodeBinary(&src->
data2,
NULL);
6437 ret |= UInt16_encodeBinary(&src->
data3,
NULL);
6438 if(g_pos + (8*
sizeof(
u8)) > g_end)
6440 memcpy(g_pos, src->
data4, 8*
sizeof(
u8));
6448 ret |= UInt16_decodeBinary(&dst->
data2,
NULL);
6449 ret |= UInt16_decodeBinary(&dst->
data3,
NULL);
6450 if(g_pos + (8*
sizeof(
u8)) > g_end)
6452 memcpy(dst->
data4, g_pos, 8*
sizeof(
u8));
6458 #define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0 6459 #define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1 6460 #define UA_NODEIDTYPE_NUMERIC_COMPLETE 2 6462 #define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40 6463 #define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80 6469 NodeId_encodeBinaryWithEncodingMask(
UA_NodeId const *src,
u8 encoding) {
6475 ret |= Byte_encodeBinary(&encoding,
NULL);
6480 ret |= Byte_encodeBinary(&encoding,
NULL);
6482 ret |= Byte_encodeBinary(&nsindex,
NULL);
6484 ret |= UInt16_encodeBinary(&identifier16,
NULL);
6487 ret |= Byte_encodeBinary(&encoding,
NULL);
6489 ret |= Byte_encodeBinary(&identifier8,
NULL);
6494 ret |= Byte_encodeBinary(&encoding,
NULL);
6502 ret |= Byte_encodeBinary(&encoding,
NULL);
6508 ret |= Byte_encodeBinary(&encoding,
NULL);
6522 return NodeId_encodeBinaryWithEncodingMask(src, 0);
6527 u8 dstByte = 0, encodingByte = 0;
6531 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6540 switch (encodingByte) {
6543 ret = Byte_decodeBinary(&dstByte,
NULL);
6549 ret |= Byte_decodeBinary(&dstByte,
NULL);
6551 ret |= UInt16_decodeBinary(&dstUInt16,
NULL);
6592 status ret = NodeId_encodeBinaryWithEncodingMask(&src->
nodeId, encoding);
6607 ret = encodeNumericWithExchangeBuffer(&src->
serverIndex,
6618 u8 encoding = *g_pos;
6636 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE 0x01 6637 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT 0x02 6649 status ret = Byte_encodeBinary(&encoding,
NULL);
6655 ret |= String_encodeBinary(&src->
locale,
NULL);
6657 ret |= String_encodeBinary(&src->
text,
NULL);
6666 status ret = Byte_decodeBinary(&encoding,
NULL);
6670 ret |= String_decodeBinary(&dst->
locale,
NULL);
6672 ret |= String_decodeBinary(&dst->
text,
NULL);
6679 UA_findDataTypeByBinary(
const UA_NodeId *typeId) {
6704 ret = encodeNumericWithExchangeBuffer(&encoding,
6731 status ret = NodeId_encodeBinary(&typeId,
NULL);
6735 ret |= Byte_encodeBinary(&encoding,
NULL);
6744 i32 signed_len = (
i32)len;
6745 ret |= Int32_encodeBinary(&signed_len);
6758 const UA_DataType *type = UA_findDataTypeByBinary(typeId);
6779 return decodeBinaryJumpTable[decode_index](dst->
content.
decoded.data, type);
6790 UA_NodeId_init(&binTypeId);
6791 status ret = NodeId_decodeBinary(&binTypeId,
NULL);
6792 ret |= Byte_decodeBinary(&encoding,
NULL);
6794 UA_NodeId_deleteMembers(&binTypeId);
6799 ret = ExtensionObject_decodeBinaryContent(dst, &binTypeId);
6800 UA_NodeId_deleteMembers(&binTypeId);
6812 UA_NodeId_deleteMembers(&binTypeId);
6823 Variant_encodeBinaryWrapExtensionObject(
const UA_Variant *src,
const bool isArray) {
6834 ret = Int32_encodeBinary(&encodedLength);
6841 UA_ExtensionObject_init(&eo);
6845 uintptr_t ptr = (uintptr_t)src->
data;
6867 return Byte_encodeBinary(&encoding,
NULL);
6886 status ret = Byte_encodeBinary(&encoding,
NULL);
6892 ret = Variant_encodeBinaryWrapExtensionObject(src, isArray);
6894 ret = UA_encodeBinaryInternal(src->
data, src->
type);
6906 Variant_decodeBinaryUnwrapExtensionObject(
UA_Variant *dst) {
6909 u8 *old_pos = g_pos;
6913 UA_NodeId_init(&typeId);
6914 status ret = NodeId_decodeBinary(&typeId,
NULL);
6920 ret = Byte_decodeBinary(&encoding,
NULL);
6922 UA_NodeId_deleteMembers(&typeId);
6928 (dst->
type = UA_findDataTypeByBinary(&typeId)) !=
NULL) {
6935 UA_NodeId_deleteMembers(&typeId);
6945 return decodeBinaryJumpTable[decode_index](dst->
data, dst->
type);
6953 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6958 if(encodingByte == 0)
6980 ret = decodeBinaryJumpTable[typeIndex](dst->
data, dst->
type);
6982 ret = Variant_decodeBinaryUnwrapExtensionObject(dst);
6996 u8 encodingMask = (
u8)
7005 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7013 ret = Variant_encodeBinary(&src->
value,
NULL);
7019 ret |= encodeNumericWithExchangeBuffer(&src->
status,
7037 #define MAX_PICO_SECONDS 9999 7043 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7048 if(encodingMask & 0x01) {
7050 ret |= Variant_decodeBinary(&dst->
value,
NULL);
7052 if(encodingMask & 0x02) {
7054 ret |= StatusCode_decodeBinary(&dst->
status);
7056 if(encodingMask & 0x04) {
7060 if(encodingMask & 0x10) {
7066 if(encodingMask & 0x08) {
7070 if(encodingMask & 0x20) {
7083 u8 encodingMask = (
u8)
7089 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7097 ret |= Int32_encodeBinary(&src->
locale);
7133 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7138 if(encodingMask & 0x01) {
7142 if(encodingMask & 0x02) {
7146 if(encodingMask & 0x04) {
7150 if(encodingMask & 0x08) {
7152 ret |= Int32_decodeBinary(&dst->
locale);
7154 if(encodingMask & 0x10) {
7158 if(encodingMask & 0x20) {
7162 if(encodingMask & 0x40) {
7179 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type);
7211 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type) {
7212 uintptr_t ptr = (uintptr_t)src;
7222 size_t memSize = membertype->
memSize;
7224 ret = encodeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7228 ret = exchangeBuffer();
7229 ptr -= member->
padding + memSize;
7238 const size_t length = *((
const size_t*)ptr);
7239 ptr +=
sizeof(size_t);
7240 ret = Array_encodeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7241 ptr +=
sizeof(
void*);
7254 g_pos = &dst->
data[*offset];
7256 g_exchangeBufferCallback = exchangeCallback;
7257 g_exchangeBufferCallbackHandle = exchangeHandle;
7258 status ret = UA_encodeBinaryInternal(src, type);
7263 *offset = (uintptr_t)(g_pos - g_buf.data);
7297 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type) {
7298 uintptr_t ptr = (uintptr_t)dst;
7308 size_t memSize = membertype->
memSize;
7309 ret |= decodeBinaryJumpTable[fi]((
void *
UA_RESTRICT)ptr, membertype);
7313 size_t *length = (
size_t*)ptr;
7314 ptr +=
sizeof(size_t);
7316 ptr +=
sizeof(
void*);
7326 memset(dst, 0, type->
memSize);
7330 g_pos = &src->
data[*offset];
7334 status ret = UA_decodeBinaryInternal(dst, type);
7338 *offset = (size_t)(g_pos - src->
data) /
sizeof(
u8);
7349 Array_calcSizeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
7355 uintptr_t ptr = (uintptr_t)src;
7357 for(
size_t i = 0; i < length; ++i) {
7358 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, type);
7371 return 4 + p->length;
7382 switch (src->identifierType) {
7386 }
else if(src->identifier.numeric >
UA_BYTE_MAX || src->namespaceIndex > 0) {
7395 s += String_calcSizeBinary(&src->identifier.string,
NULL);
7408 size_t s = NodeId_calcSizeBinary(&src->
nodeId,
NULL);
7420 s += String_calcSizeBinary(&src->
locale,
NULL);
7422 s += String_calcSizeBinary(&src->
text,
NULL);
7438 s += calcSizeBinaryJumpTable[encode_index](src->
content.
decoded.data, type);
7466 UA_NodeId_init(&typeId);
7481 uintptr_t ptr = (uintptr_t)src->
data;
7483 for(
size_t i = 0; i < length; ++i) {
7486 s += NodeId_calcSizeBinary(&typeId,
NULL);
7489 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, src->
type);
7503 s += Variant_calcSizeBinary(&src->
value,
NULL);
7569 uintptr_t ptr = (uintptr_t)p;
7572 for(
size_t i = 0; i < membersSize; ++i) {
7578 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7582 const size_t length = *((
const size_t*)ptr);
7583 ptr +=
sizeof(size_t);
7584 s += Array_calcSizeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7585 ptr +=
sizeof(
void*);
7600 #ifdef UA_ENABLE_TYPENAMES 7603 .namespaceZero =
true,
7611 #ifdef UA_ENABLE_TYPENAMES 7614 .namespaceZero =
true,
7622 #ifdef UA_ENABLE_TYPENAMES 7625 .namespaceZero =
true,
7633 #ifdef UA_ENABLE_TYPENAMES 7636 .namespaceZero =
true,
7644 #ifdef UA_ENABLE_TYPENAMES 7647 .namespaceZero =
true,
7655 #ifdef UA_ENABLE_TYPENAMES 7658 .namespaceZero =
true,
7666 #ifdef UA_ENABLE_TYPENAMES 7669 .namespaceZero =
true,
7677 #ifdef UA_ENABLE_TYPENAMES 7680 .namespaceZero =
true,
7688 #ifdef UA_ENABLE_TYPENAMES 7691 .namespaceZero =
true,
7699 #ifdef UA_ENABLE_TYPENAMES 7702 .namespaceZero =
true,
7710 #ifdef UA_ENABLE_TYPENAMES 7713 .namespaceZero =
true,
7721 #ifdef UA_ENABLE_TYPENAMES 7724 .namespaceZero =
true,
7732 #ifdef UA_ENABLE_TYPENAMES 7735 .namespaceZero =
true,
7743 #ifdef UA_ENABLE_TYPENAMES 7746 .namespaceZero =
true,
7754 #ifdef UA_ENABLE_TYPENAMES 7757 .namespaceZero =
true,
7765 #ifdef UA_ENABLE_TYPENAMES 7768 .namespaceZero =
true,
7776 #ifdef UA_ENABLE_TYPENAMES 7779 .namespaceZero =
true,
7787 #ifdef UA_ENABLE_TYPENAMES 7790 .namespaceZero =
true,
7798 #ifdef UA_ENABLE_TYPENAMES 7801 .namespaceZero =
true,
7809 #ifdef UA_ENABLE_TYPENAMES 7810 .memberName =
"namespaceIndex",
7812 .namespaceZero =
true,
7817 #ifdef UA_ENABLE_TYPENAMES 7818 .memberName =
"name",
7820 .namespaceZero =
true,
7828 #ifdef UA_ENABLE_TYPENAMES 7831 .namespaceZero =
true,
7839 #ifdef UA_ENABLE_TYPENAMES 7842 .namespaceZero =
true,
7850 #ifdef UA_ENABLE_TYPENAMES 7853 .namespaceZero =
true,
7861 #ifdef UA_ENABLE_TYPENAMES 7864 .namespaceZero =
true,
7872 #ifdef UA_ENABLE_TYPENAMES 7875 .namespaceZero =
true,
7883 #ifdef UA_ENABLE_TYPENAMES 7884 .memberName =
"certificateData",
7886 .namespaceZero =
true,
7891 #ifdef UA_ENABLE_TYPENAMES 7892 .memberName =
"signature",
7894 .namespaceZero =
true,
7902 #ifdef UA_ENABLE_TYPENAMES 7903 .memberName =
"targetId",
7905 .namespaceZero =
true,
7910 #ifdef UA_ENABLE_TYPENAMES 7911 .memberName =
"remainingPathIndex",
7913 .namespaceZero =
true,
7921 #ifdef UA_ENABLE_TYPENAMES 7922 .memberName =
"specifiedAttributes",
7924 .namespaceZero =
true,
7929 #ifdef UA_ENABLE_TYPENAMES 7930 .memberName =
"displayName",
7932 .namespaceZero =
true,
7937 #ifdef UA_ENABLE_TYPENAMES 7938 .memberName =
"description",
7940 .namespaceZero =
true,
7945 #ifdef UA_ENABLE_TYPENAMES 7946 .memberName =
"writeMask",
7948 .namespaceZero =
true,
7953 #ifdef UA_ENABLE_TYPENAMES 7954 .memberName =
"userWriteMask",
7956 .namespaceZero =
true,
7961 #ifdef UA_ENABLE_TYPENAMES 7962 .memberName =
"containsNoLoops",
7964 .namespaceZero =
true,
7969 #ifdef UA_ENABLE_TYPENAMES 7970 .memberName =
"eventNotifier",
7972 .namespaceZero =
true,
7980 #ifdef UA_ENABLE_TYPENAMES 7983 .namespaceZero =
true,
7991 #ifdef UA_ENABLE_TYPENAMES 7992 .memberName =
"authenticationToken",
7994 .namespaceZero =
true,
7999 #ifdef UA_ENABLE_TYPENAMES 8000 .memberName =
"timestamp",
8002 .namespaceZero =
true,
8007 #ifdef UA_ENABLE_TYPENAMES 8008 .memberName =
"requestHandle",
8010 .namespaceZero =
true,
8015 #ifdef UA_ENABLE_TYPENAMES 8016 .memberName =
"returnDiagnostics",
8018 .namespaceZero =
true,
8023 #ifdef UA_ENABLE_TYPENAMES 8024 .memberName =
"auditEntryId",
8026 .namespaceZero =
true,
8031 #ifdef UA_ENABLE_TYPENAMES 8032 .memberName =
"timeoutHint",
8034 .namespaceZero =
true,
8039 #ifdef UA_ENABLE_TYPENAMES 8040 .memberName =
"additionalHeader",
8042 .namespaceZero =
true,
8050 #ifdef UA_ENABLE_TYPENAMES 8051 .memberName =
"statusCode",
8053 .namespaceZero =
true,
8058 #ifdef UA_ENABLE_TYPENAMES 8059 .memberName =
"revisedSamplingInterval",
8061 .namespaceZero =
true,
8066 #ifdef UA_ENABLE_TYPENAMES 8067 .memberName =
"revisedQueueSize",
8069 .namespaceZero =
true,
8074 #ifdef UA_ENABLE_TYPENAMES 8075 .memberName =
"filterResult",
8077 .namespaceZero =
true,
8085 #ifdef UA_ENABLE_TYPENAMES 8086 .memberName =
"requestHeader",
8088 .namespaceZero =
true,
8096 #ifdef UA_ENABLE_TYPENAMES 8097 .memberName =
"statusCode",
8099 .namespaceZero =
true,
8104 #ifdef UA_ENABLE_TYPENAMES 8105 .memberName =
"addedNodeId",
8107 .namespaceZero =
true,
8115 #ifdef UA_ENABLE_TYPENAMES 8116 .memberName =
"specifiedAttributes",
8118 .namespaceZero =
true,
8123 #ifdef UA_ENABLE_TYPENAMES 8124 .memberName =
"displayName",
8126 .namespaceZero =
true,
8131 #ifdef UA_ENABLE_TYPENAMES 8132 .memberName =
"description",
8134 .namespaceZero =
true,
8139 #ifdef UA_ENABLE_TYPENAMES 8140 .memberName =
"writeMask",
8142 .namespaceZero =
true,
8147 #ifdef UA_ENABLE_TYPENAMES 8148 .memberName =
"userWriteMask",
8150 .namespaceZero =
true,
8155 #ifdef UA_ENABLE_TYPENAMES 8156 .memberName =
"value",
8158 .namespaceZero =
true,
8163 #ifdef UA_ENABLE_TYPENAMES 8164 .memberName =
"dataType",
8166 .namespaceZero =
true,
8171 #ifdef UA_ENABLE_TYPENAMES 8172 .memberName =
"valueRank",
8174 .namespaceZero =
true,
8179 #ifdef UA_ENABLE_TYPENAMES 8180 .memberName =
"arrayDimensions",
8182 .namespaceZero =
true,
8187 #ifdef UA_ENABLE_TYPENAMES 8188 .memberName =
"accessLevel",
8190 .namespaceZero =
true,
8195 #ifdef UA_ENABLE_TYPENAMES 8196 .memberName =
"userAccessLevel",
8198 .namespaceZero =
true,
8203 #ifdef UA_ENABLE_TYPENAMES 8204 .memberName =
"minimumSamplingInterval",
8206 .namespaceZero =
true,
8211 #ifdef UA_ENABLE_TYPENAMES 8212 .memberName =
"historizing",
8214 .namespaceZero =
true,
8222 #ifdef UA_ENABLE_TYPENAMES 8223 .memberName =
"sequenceNumber",
8225 .namespaceZero =
true,
8230 #ifdef UA_ENABLE_TYPENAMES 8231 .memberName =
"publishTime",
8233 .namespaceZero =
true,
8238 #ifdef UA_ENABLE_TYPENAMES 8239 .memberName =
"notificationData",
8241 .namespaceZero =
true,
8249 #ifdef UA_ENABLE_TYPENAMES 8252 .namespaceZero =
true,
8260 #ifdef UA_ENABLE_TYPENAMES 8263 .namespaceZero =
true,
8271 #ifdef UA_ENABLE_TYPENAMES 8272 .memberName =
"statusCode",
8274 .namespaceZero =
true,
8279 #ifdef UA_ENABLE_TYPENAMES 8280 .memberName =
"inputArgumentResults",
8282 .namespaceZero =
true,
8287 #ifdef UA_ENABLE_TYPENAMES 8288 .memberName =
"inputArgumentDiagnosticInfos",
8290 .namespaceZero =
true,
8295 #ifdef UA_ENABLE_TYPENAMES 8296 .memberName =
"outputArguments",
8298 .namespaceZero =
true,
8306 #ifdef UA_ENABLE_TYPENAMES 8307 .memberName =
"statusCode",
8309 .namespaceZero =
true,
8314 #ifdef UA_ENABLE_TYPENAMES 8315 .memberName =
"dataStatusCodes",
8317 .namespaceZero =
true,
8322 #ifdef UA_ENABLE_TYPENAMES 8323 .memberName =
"dataDiagnosticInfos",
8325 .namespaceZero =
true,
8333 #ifdef UA_ENABLE_TYPENAMES 8334 .memberName =
"referenceTypeId",
8336 .namespaceZero =
true,
8341 #ifdef UA_ENABLE_TYPENAMES 8342 .memberName =
"isInverse",
8344 .namespaceZero =
true,
8349 #ifdef UA_ENABLE_TYPENAMES 8350 .memberName =
"includeSubtypes",
8352 .namespaceZero =
true,
8357 #ifdef UA_ENABLE_TYPENAMES 8358 .memberName =
"targetName",
8360 .namespaceZero =
true,
8368 #ifdef UA_ENABLE_TYPENAMES 8371 .namespaceZero =
true,
8379 #ifdef UA_ENABLE_TYPENAMES 8380 .memberName =
"objectId",
8382 .namespaceZero =
true,
8387 #ifdef UA_ENABLE_TYPENAMES 8388 .memberName =
"methodId",
8390 .namespaceZero =
true,
8395 #ifdef UA_ENABLE_TYPENAMES 8396 .memberName =
"inputArguments",
8398 .namespaceZero =
true,
8406 #ifdef UA_ENABLE_TYPENAMES 8407 .memberName =
"requestHeader",
8409 .namespaceZero =
true,
8414 #ifdef UA_ENABLE_TYPENAMES 8415 .memberName =
"nodesToUnregister",
8417 .namespaceZero =
true,
8425 #ifdef UA_ENABLE_TYPENAMES 8426 .memberName =
"statusCode",
8428 .namespaceZero =
true,
8433 #ifdef UA_ENABLE_TYPENAMES 8434 .memberName =
"operandStatusCodes",
8436 .namespaceZero =
true,
8441 #ifdef UA_ENABLE_TYPENAMES 8442 .memberName =
"operandDiagnosticInfos",
8444 .namespaceZero =
true,
8452 #ifdef UA_ENABLE_TYPENAMES 8453 .memberName =
"nodeId",
8455 .namespaceZero =
true,
8460 #ifdef UA_ENABLE_TYPENAMES 8461 .memberName =
"typeDefinitionNode",
8463 .namespaceZero =
true,
8468 #ifdef UA_ENABLE_TYPENAMES 8469 .memberName =
"values",
8471 .namespaceZero =
true,
8479 #ifdef UA_ENABLE_TYPENAMES 8480 .memberName =
"policyId",
8482 .namespaceZero =
true,
8490 #ifdef UA_ENABLE_TYPENAMES 8491 .memberName =
"requestHeader",
8493 .namespaceZero =
true,
8498 #ifdef UA_ENABLE_TYPENAMES 8499 .memberName =
"publishingEnabled",
8501 .namespaceZero =
true,
8506 #ifdef UA_ENABLE_TYPENAMES 8507 .memberName =
"subscriptionIds",
8509 .namespaceZero =
true,
8517 #ifdef UA_ENABLE_TYPENAMES 8520 .namespaceZero =
true,
8528 #ifdef UA_ENABLE_TYPENAMES 8529 .memberName =
"requestHeader",
8531 .namespaceZero =
true,
8536 #ifdef UA_ENABLE_TYPENAMES 8537 .memberName =
"methodsToCall",
8539 .namespaceZero =
true,
8547 #ifdef UA_ENABLE_TYPENAMES 8548 .memberName =
"specifiedAttributes",
8550 .namespaceZero =
true,
8555 #ifdef UA_ENABLE_TYPENAMES 8556 .memberName =
"displayName",
8558 .namespaceZero =
true,
8563 #ifdef UA_ENABLE_TYPENAMES 8564 .memberName =
"description",
8566 .namespaceZero =
true,
8571 #ifdef UA_ENABLE_TYPENAMES 8572 .memberName =
"writeMask",
8574 .namespaceZero =
true,
8579 #ifdef UA_ENABLE_TYPENAMES 8580 .memberName =
"userWriteMask",
8582 .namespaceZero =
true,
8587 #ifdef UA_ENABLE_TYPENAMES 8588 .memberName =
"executable",
8590 .namespaceZero =
true,
8595 #ifdef UA_ENABLE_TYPENAMES 8596 .memberName =
"userExecutable",
8598 .namespaceZero =
true,
8606 #ifdef UA_ENABLE_TYPENAMES 8607 .memberName =
"sourceNodeId",
8609 .namespaceZero =
true,
8614 #ifdef UA_ENABLE_TYPENAMES 8615 .memberName =
"referenceTypeId",
8617 .namespaceZero =
true,
8622 #ifdef UA_ENABLE_TYPENAMES 8623 .memberName =
"isForward",
8625 .namespaceZero =
true,
8630 #ifdef UA_ENABLE_TYPENAMES 8631 .memberName =
"targetNodeId",
8633 .namespaceZero =
true,
8638 #ifdef UA_ENABLE_TYPENAMES 8639 .memberName =
"deleteBidirectional",
8641 .namespaceZero =
true,
8649 #ifdef UA_ENABLE_TYPENAMES 8650 .memberName =
"nodeId",
8652 .namespaceZero =
true,
8657 #ifdef UA_ENABLE_TYPENAMES 8658 .memberName =
"attributeId",
8660 .namespaceZero =
true,
8665 #ifdef UA_ENABLE_TYPENAMES 8666 .memberName =
"indexRange",
8668 .namespaceZero =
true,
8673 #ifdef UA_ENABLE_TYPENAMES 8674 .memberName =
"value",
8676 .namespaceZero =
true,
8684 #ifdef UA_ENABLE_TYPENAMES 8685 .memberName =
"statusCode",
8687 .namespaceZero =
true,
8692 #ifdef UA_ENABLE_TYPENAMES 8693 .memberName =
"monitoredItemId",
8695 .namespaceZero =
true,
8700 #ifdef UA_ENABLE_TYPENAMES 8701 .memberName =
"revisedSamplingInterval",
8703 .namespaceZero =
true,
8708 #ifdef UA_ENABLE_TYPENAMES 8709 .memberName =
"revisedQueueSize",
8711 .namespaceZero =
true,
8716 #ifdef UA_ENABLE_TYPENAMES 8717 .memberName =
"filterResult",
8719 .namespaceZero =
true,
8727 #ifdef UA_ENABLE_TYPENAMES 8730 .namespaceZero =
true,
8738 #ifdef UA_ENABLE_TYPENAMES 8739 .memberName =
"clientHandle",
8741 .namespaceZero =
true,
8746 #ifdef UA_ENABLE_TYPENAMES 8747 .memberName =
"samplingInterval",
8749 .namespaceZero =
true,
8754 #ifdef UA_ENABLE_TYPENAMES 8755 .memberName =
"filter",
8757 .namespaceZero =
true,
8762 #ifdef UA_ENABLE_TYPENAMES 8763 .memberName =
"queueSize",
8765 .namespaceZero =
true,
8770 #ifdef UA_ENABLE_TYPENAMES 8771 .memberName =
"discardOldest",
8773 .namespaceZero =
true,
8781 #ifdef UA_ENABLE_TYPENAMES 8782 .memberName =
"algorithm",
8784 .namespaceZero =
true,
8789 #ifdef UA_ENABLE_TYPENAMES 8790 .memberName =
"signature",
8792 .namespaceZero =
true,
8800 #ifdef UA_ENABLE_TYPENAMES 8801 .memberName =
"referenceTypeId",
8803 .namespaceZero =
true,
8808 #ifdef UA_ENABLE_TYPENAMES 8809 .memberName =
"isInverse",
8811 .namespaceZero =
true,
8816 #ifdef UA_ENABLE_TYPENAMES 8817 .memberName =
"targetId",
8819 .namespaceZero =
true,
8827 #ifdef UA_ENABLE_TYPENAMES 8828 .memberName =
"name",
8830 .namespaceZero =
true,
8835 #ifdef UA_ENABLE_TYPENAMES 8836 .memberName =
"dataType",
8838 .namespaceZero =
true,
8843 #ifdef UA_ENABLE_TYPENAMES 8844 .memberName =
"valueRank",
8846 .namespaceZero =
true,
8851 #ifdef UA_ENABLE_TYPENAMES 8852 .memberName =
"arrayDimensions",
8854 .namespaceZero =
true,
8859 #ifdef UA_ENABLE_TYPENAMES 8860 .memberName =
"description",
8862 .namespaceZero =
true,
8870 #ifdef UA_ENABLE_TYPENAMES 8871 .memberName =
"policyId",
8873 .namespaceZero =
true,
8881 #ifdef UA_ENABLE_TYPENAMES 8882 .memberName =
"specifiedAttributes",
8884 .namespaceZero =
true,
8889 #ifdef UA_ENABLE_TYPENAMES 8890 .memberName =
"displayName",
8892 .namespaceZero =
true,
8897 #ifdef UA_ENABLE_TYPENAMES 8898 .memberName =
"description",
8900 .namespaceZero =
true,
8905 #ifdef UA_ENABLE_TYPENAMES 8906 .memberName =
"writeMask",
8908 .namespaceZero =
true,
8913 #ifdef UA_ENABLE_TYPENAMES 8914 .memberName =
"userWriteMask",
8916 .namespaceZero =
true,
8921 #ifdef UA_ENABLE_TYPENAMES 8922 .memberName =
"isAbstract",
8924 .namespaceZero =
true,
8932 #ifdef UA_ENABLE_TYPENAMES 8935 .namespaceZero =
true,
8943 #ifdef UA_ENABLE_TYPENAMES 8946 .namespaceZero =
true,
8954 #ifdef UA_ENABLE_TYPENAMES 8957 .namespaceZero =
true,
8965 #ifdef UA_ENABLE_TYPENAMES 8966 .memberName =
"productUri",
8968 .namespaceZero =
true,
8973 #ifdef UA_ENABLE_TYPENAMES 8974 .memberName =
"manufacturerName",
8976 .namespaceZero =
true,
8981 #ifdef UA_ENABLE_TYPENAMES 8982 .memberName =
"productName",
8984 .namespaceZero =
true,
8989 #ifdef UA_ENABLE_TYPENAMES 8990 .memberName =
"softwareVersion",
8992 .namespaceZero =
true,
8997 #ifdef UA_ENABLE_TYPENAMES 8998 .memberName =
"buildNumber",
9000 .namespaceZero =
true,
9005 #ifdef UA_ENABLE_TYPENAMES 9006 .memberName =
"buildDate",
9008 .namespaceZero =
true,
9016 #ifdef UA_ENABLE_TYPENAMES 9019 .namespaceZero =
true,
9027 #ifdef UA_ENABLE_TYPENAMES 9028 .memberName =
"channelId",
9030 .namespaceZero =
true,
9035 #ifdef UA_ENABLE_TYPENAMES 9036 .memberName =
"tokenId",
9038 .namespaceZero =
true,
9043 #ifdef UA_ENABLE_TYPENAMES 9044 .memberName =
"createdAt",
9046 .namespaceZero =
true,
9051 #ifdef UA_ENABLE_TYPENAMES 9052 .memberName =
"revisedLifetime",
9054 .namespaceZero =
true,
9062 #ifdef UA_ENABLE_TYPENAMES 9063 .memberName =
"clientHandle",
9065 .namespaceZero =
true,
9070 #ifdef UA_ENABLE_TYPENAMES 9071 .memberName =
"value",
9073 .namespaceZero =
true,
9081 #ifdef UA_ENABLE_TYPENAMES 9082 .memberName =
"nodeId",
9084 .namespaceZero =
true,
9089 #ifdef UA_ENABLE_TYPENAMES 9090 .memberName =
"deleteTargetReferences",
9092 .namespaceZero =
true,
9100 #ifdef UA_ENABLE_TYPENAMES 9101 .memberName =
"subscriptionId",
9103 .namespaceZero =
true,
9108 #ifdef UA_ENABLE_TYPENAMES 9109 .memberName =
"sequenceNumber",
9111 .namespaceZero =
true,
9119 #ifdef UA_ENABLE_TYPENAMES 9120 .memberName =
"nodeId",
9122 .namespaceZero =
true,
9127 #ifdef UA_ENABLE_TYPENAMES 9128 .memberName =
"attributeId",
9130 .namespaceZero =
true,
9135 #ifdef UA_ENABLE_TYPENAMES 9136 .memberName =
"indexRange",
9138 .namespaceZero =
true,
9143 #ifdef UA_ENABLE_TYPENAMES 9144 .memberName =
"dataEncoding",
9146 .namespaceZero =
true,
9154 #ifdef UA_ENABLE_TYPENAMES 9155 .memberName =
"specifiedAttributes",
9157 .namespaceZero =
true,
9162 #ifdef UA_ENABLE_TYPENAMES 9163 .memberName =
"displayName",
9165 .namespaceZero =
true,
9170 #ifdef UA_ENABLE_TYPENAMES 9171 .memberName =
"description",
9173 .namespaceZero =
true,
9178 #ifdef UA_ENABLE_TYPENAMES 9179 .memberName =
"writeMask",
9181 .namespaceZero =
true,
9186 #ifdef UA_ENABLE_TYPENAMES 9187 .memberName =
"userWriteMask",
9189 .namespaceZero =
true,
9194 #ifdef UA_ENABLE_TYPENAMES 9195 .memberName =
"isAbstract",
9197 .namespaceZero =
true,
9205 #ifdef UA_ENABLE_TYPENAMES 9206 .memberName =
"timestamp",
9208 .namespaceZero =
true,
9213 #ifdef UA_ENABLE_TYPENAMES 9214 .memberName =
"requestHandle",
9216 .namespaceZero =
true,
9221 #ifdef UA_ENABLE_TYPENAMES 9222 .memberName =
"serviceResult",
9224 .namespaceZero =
true,
9229 #ifdef UA_ENABLE_TYPENAMES 9230 .memberName =
"serviceDiagnostics",
9232 .namespaceZero =
true,
9237 #ifdef UA_ENABLE_TYPENAMES 9238 .memberName =
"stringTable",
9240 .namespaceZero =
true,
9245 #ifdef UA_ENABLE_TYPENAMES 9246 .memberName =
"additionalHeader",
9248 .namespaceZero =
true,
9256 #ifdef UA_ENABLE_TYPENAMES 9257 .memberName =
"requestHeader",
9259 .namespaceZero =
true,
9264 #ifdef UA_ENABLE_TYPENAMES 9265 .memberName =
"subscriptionIds",
9267 .namespaceZero =
true,
9275 #ifdef UA_ENABLE_TYPENAMES 9276 .memberName =
"viewId",
9278 .namespaceZero =
true,
9283 #ifdef UA_ENABLE_TYPENAMES 9284 .memberName =
"timestamp",
9286 .namespaceZero =
true,
9291 #ifdef UA_ENABLE_TYPENAMES 9292 .memberName =
"viewVersion",
9294 .namespaceZero =
true,
9302 #ifdef UA_ENABLE_TYPENAMES 9303 .memberName =
"responseHeader",
9305 .namespaceZero =
true,
9310 #ifdef UA_ENABLE_TYPENAMES 9311 .memberName =
"results",
9313 .namespaceZero =
true,
9318 #ifdef UA_ENABLE_TYPENAMES 9319 .memberName =
"diagnosticInfos",
9321 .namespaceZero =
true,
9329 #ifdef UA_ENABLE_TYPENAMES 9330 .memberName =
"specifiedAttributes",
9332 .namespaceZero =
true,
9337 #ifdef UA_ENABLE_TYPENAMES 9338 .memberName =
"displayName",
9340 .namespaceZero =
true,
9345 #ifdef UA_ENABLE_TYPENAMES 9346 .memberName =
"description",
9348 .namespaceZero =
true,
9353 #ifdef UA_ENABLE_TYPENAMES 9354 .memberName =
"writeMask",
9356 .namespaceZero =
true,
9361 #ifdef UA_ENABLE_TYPENAMES 9362 .memberName =
"userWriteMask",
9364 .namespaceZero =
true,
9372 #ifdef UA_ENABLE_TYPENAMES 9373 .memberName =
"requestHeader",
9375 .namespaceZero =
true,
9380 #ifdef UA_ENABLE_TYPENAMES 9381 .memberName =
"nodesToRegister",
9383 .namespaceZero =
true,
9391 #ifdef UA_ENABLE_TYPENAMES 9392 .memberName =
"requestHeader",
9394 .namespaceZero =
true,
9399 #ifdef UA_ENABLE_TYPENAMES 9400 .memberName =
"nodesToDelete",
9402 .namespaceZero =
true,
9410 #ifdef UA_ENABLE_TYPENAMES 9411 .memberName =
"responseHeader",
9413 .namespaceZero =
true,
9418 #ifdef UA_ENABLE_TYPENAMES 9419 .memberName =
"subscriptionId",
9421 .namespaceZero =
true,
9426 #ifdef UA_ENABLE_TYPENAMES 9427 .memberName =
"availableSequenceNumbers",
9429 .namespaceZero =
true,
9434 #ifdef UA_ENABLE_TYPENAMES 9435 .memberName =
"moreNotifications",
9437 .namespaceZero =
true,
9442 #ifdef UA_ENABLE_TYPENAMES 9443 .memberName =
"notificationMessage",
9445 .namespaceZero =
true,
9450 #ifdef UA_ENABLE_TYPENAMES 9451 .memberName =
"results",
9453 .namespaceZero =
true,
9458 #ifdef UA_ENABLE_TYPENAMES 9459 .memberName =
"diagnosticInfos",
9461 .namespaceZero =
true,
9469 #ifdef UA_ENABLE_TYPENAMES 9470 .memberName =
"monitoredItemId",
9472 .namespaceZero =
true,
9477 #ifdef UA_ENABLE_TYPENAMES 9478 .memberName =
"requestedParameters",
9480 .namespaceZero =
true,
9488 #ifdef UA_ENABLE_TYPENAMES 9489 .memberName =
"policyId",
9491 .namespaceZero =
true,
9496 #ifdef UA_ENABLE_TYPENAMES 9497 .memberName =
"userName",
9499 .namespaceZero =
true,
9504 #ifdef UA_ENABLE_TYPENAMES 9505 .memberName =
"password",
9507 .namespaceZero =
true,
9512 #ifdef UA_ENABLE_TYPENAMES 9513 .memberName =
"encryptionAlgorithm",
9515 .namespaceZero =
true,
9523 #ifdef UA_ENABLE_TYPENAMES 9526 .namespaceZero =
true,
9534 #ifdef UA_ENABLE_TYPENAMES 9537 .namespaceZero =
true,
9545 #ifdef UA_ENABLE_TYPENAMES 9546 .memberName =
"requestHeader",
9548 .namespaceZero =
true,
9553 #ifdef UA_ENABLE_TYPENAMES 9554 .memberName =
"clientSignature",
9556 .namespaceZero =
true,
9561 #ifdef UA_ENABLE_TYPENAMES 9562 .memberName =
"clientSoftwareCertificates",
9564 .namespaceZero =
true,
9569 #ifdef UA_ENABLE_TYPENAMES 9570 .memberName =
"localeIds",
9572 .namespaceZero =
true,
9577 #ifdef UA_ENABLE_TYPENAMES 9578 .memberName =
"userIdentityToken",
9580 .namespaceZero =
true,
9585 #ifdef UA_ENABLE_TYPENAMES 9586 .memberName =
"userTokenSignature",
9588 .namespaceZero =
true,
9596 #ifdef UA_ENABLE_TYPENAMES 9597 .memberName =
"responseHeader",
9599 .namespaceZero =
true,
9604 #ifdef UA_ENABLE_TYPENAMES 9605 .memberName =
"serverProtocolVersion",
9607 .namespaceZero =
true,
9612 #ifdef UA_ENABLE_TYPENAMES 9613 .memberName =
"securityToken",
9615 .namespaceZero =
true,
9620 #ifdef UA_ENABLE_TYPENAMES 9621 .memberName =
"serverNonce",
9623 .namespaceZero =
true,
9631 #ifdef UA_ENABLE_TYPENAMES 9634 .namespaceZero =
true,
9642 #ifdef UA_ENABLE_TYPENAMES 9645 .namespaceZero =
true,
9653 #ifdef UA_ENABLE_TYPENAMES 9654 .memberName =
"responseHeader",
9656 .namespaceZero =
true,
9661 #ifdef UA_ENABLE_TYPENAMES 9662 .memberName =
"queryDataSets",
9664 .namespaceZero =
true,
9669 #ifdef UA_ENABLE_TYPENAMES 9670 .memberName =
"revisedContinuationPoint",
9672 .namespaceZero =
true,
9680 #ifdef UA_ENABLE_TYPENAMES 9681 .memberName =
"responseHeader",
9683 .namespaceZero =
true,
9688 #ifdef UA_ENABLE_TYPENAMES 9689 .memberName =
"serverNonce",
9691 .namespaceZero =
true,
9696 #ifdef UA_ENABLE_TYPENAMES 9697 .memberName =
"results",
9699 .namespaceZero =
true,
9704 #ifdef UA_ENABLE_TYPENAMES 9705 .memberName =
"diagnosticInfos",
9707 .namespaceZero =
true,
9715 #ifdef UA_ENABLE_TYPENAMES 9718 .namespaceZero =
true,
9726 #ifdef UA_ENABLE_TYPENAMES 9727 .memberName =
"requestHeader",
9729 .namespaceZero =
true,
9734 #ifdef UA_ENABLE_TYPENAMES 9735 .memberName =
"releaseContinuationPoint",
9737 .namespaceZero =
true,
9742 #ifdef UA_ENABLE_TYPENAMES 9743 .memberName =
"continuationPoint",
9745 .namespaceZero =
true,
9753 #ifdef UA_ENABLE_TYPENAMES 9754 .memberName =
"responseHeader",
9756 .namespaceZero =
true,
9761 #ifdef UA_ENABLE_TYPENAMES 9762 .memberName =
"results",
9764 .namespaceZero =
true,
9769 #ifdef UA_ENABLE_TYPENAMES 9770 .memberName =
"diagnosticInfos",
9772 .namespaceZero =
true,
9780 #ifdef UA_ENABLE_TYPENAMES 9781 .memberName =
"requestHeader",
9783 .namespaceZero =
true,
9788 #ifdef UA_ENABLE_TYPENAMES 9789 .memberName =
"releaseContinuationPoints",
9791 .namespaceZero =
true,
9796 #ifdef UA_ENABLE_TYPENAMES 9797 .memberName =
"continuationPoints",
9799 .namespaceZero =
true,
9807 #ifdef UA_ENABLE_TYPENAMES 9808 .memberName =
"requestHeader",
9810 .namespaceZero =
true,
9815 #ifdef UA_ENABLE_TYPENAMES 9816 .memberName =
"requestedPublishingInterval",
9818 .namespaceZero =
true,
9823 #ifdef UA_ENABLE_TYPENAMES 9824 .memberName =
"requestedLifetimeCount",
9826 .namespaceZero =
true,
9831 #ifdef UA_ENABLE_TYPENAMES 9832 .memberName =
"requestedMaxKeepAliveCount",
9834 .namespaceZero =
true,
9839 #ifdef UA_ENABLE_TYPENAMES 9840 .memberName =
"maxNotificationsPerPublish",
9842 .namespaceZero =
true,
9847 #ifdef UA_ENABLE_TYPENAMES 9848 .memberName =
"publishingEnabled",
9850 .namespaceZero =
true,
9855 #ifdef UA_ENABLE_TYPENAMES 9856 .memberName =
"priority",
9858 .namespaceZero =
true,
9866 #ifdef UA_ENABLE_TYPENAMES 9867 .memberName =
"specifiedAttributes",
9869 .namespaceZero =
true,
9874 #ifdef UA_ENABLE_TYPENAMES 9875 .memberName =
"displayName",
9877 .namespaceZero =
true,
9882 #ifdef UA_ENABLE_TYPENAMES 9883 .memberName =
"description",
9885 .namespaceZero =
true,
9890 #ifdef UA_ENABLE_TYPENAMES 9891 .memberName =
"writeMask",
9893 .namespaceZero =
true,
9898 #ifdef UA_ENABLE_TYPENAMES 9899 .memberName =
"userWriteMask",
9901 .namespaceZero =
true,
9906 #ifdef UA_ENABLE_TYPENAMES 9907 .memberName =
"value",
9909 .namespaceZero =
true,
9914 #ifdef UA_ENABLE_TYPENAMES 9915 .memberName =
"dataType",
9917 .namespaceZero =
true,
9922 #ifdef UA_ENABLE_TYPENAMES 9923 .memberName =
"valueRank",
9925 .namespaceZero =
true,
9930 #ifdef UA_ENABLE_TYPENAMES 9931 .memberName =
"arrayDimensions",
9933 .namespaceZero =
true,
9938 #ifdef UA_ENABLE_TYPENAMES 9939 .memberName =
"isAbstract",
9941 .namespaceZero =
true,
9949 #ifdef UA_ENABLE_TYPENAMES 9950 .memberName =
"statusCode",
9952 .namespaceZero =
true,
9957 #ifdef UA_ENABLE_TYPENAMES 9958 .memberName =
"targets",
9960 .namespaceZero =
true,
9968 #ifdef UA_ENABLE_TYPENAMES 9969 .memberName =
"responseHeader",
9971 .namespaceZero =
true,
9976 #ifdef UA_ENABLE_TYPENAMES 9977 .memberName =
"revisedPublishingInterval",
9979 .namespaceZero =
true,
9984 #ifdef UA_ENABLE_TYPENAMES 9985 .memberName =
"revisedLifetimeCount",
9987 .namespaceZero =
true,
9992 #ifdef UA_ENABLE_TYPENAMES 9993 .memberName =
"revisedMaxKeepAliveCount",
9995 .namespaceZero =
true,
10003 #ifdef UA_ENABLE_TYPENAMES 10004 .memberName =
"requestHeader",
10006 .namespaceZero =
true,
10011 #ifdef UA_ENABLE_TYPENAMES 10012 .memberName =
"clientProtocolVersion",
10014 .namespaceZero =
true,
10019 #ifdef UA_ENABLE_TYPENAMES 10020 .memberName =
"requestType",
10022 .namespaceZero =
true,
10027 #ifdef UA_ENABLE_TYPENAMES 10028 .memberName =
"securityMode",
10030 .namespaceZero =
true,
10035 #ifdef UA_ENABLE_TYPENAMES 10036 .memberName =
"clientNonce",
10038 .namespaceZero =
true,
10043 #ifdef UA_ENABLE_TYPENAMES 10044 .memberName =
"requestedLifetime",
10046 .namespaceZero =
true,
10054 #ifdef UA_ENABLE_TYPENAMES 10055 .memberName =
"responseHeader",
10057 .namespaceZero =
true,
10062 #ifdef UA_ENABLE_TYPENAMES 10063 .memberName =
"registeredNodeIds",
10065 .namespaceZero =
true,
10073 #ifdef UA_ENABLE_TYPENAMES 10074 .memberName =
"requestHeader",
10076 .namespaceZero =
true,
10081 #ifdef UA_ENABLE_TYPENAMES 10082 .memberName =
"deleteSubscriptions",
10084 .namespaceZero =
true,
10092 #ifdef UA_ENABLE_TYPENAMES 10093 .memberName =
"requestHeader",
10095 .namespaceZero =
true,
10100 #ifdef UA_ENABLE_TYPENAMES 10101 .memberName =
"subscriptionId",
10103 .namespaceZero =
true,
10108 #ifdef UA_ENABLE_TYPENAMES 10109 .memberName =
"requestedPublishingInterval",
10111 .namespaceZero =
true,
10116 #ifdef UA_ENABLE_TYPENAMES 10117 .memberName =
"requestedLifetimeCount",
10119 .namespaceZero =
true,
10124 #ifdef UA_ENABLE_TYPENAMES 10125 .memberName =
"requestedMaxKeepAliveCount",
10127 .namespaceZero =
true,
10132 #ifdef UA_ENABLE_TYPENAMES 10133 .memberName =
"maxNotificationsPerPublish",
10135 .namespaceZero =
true,
10140 #ifdef UA_ENABLE_TYPENAMES 10141 .memberName =
"priority",
10143 .namespaceZero =
true,
10151 #ifdef UA_ENABLE_TYPENAMES 10152 .memberName =
"policyId",
10154 .namespaceZero =
true,
10159 #ifdef UA_ENABLE_TYPENAMES 10160 .memberName =
"tokenType",
10162 .namespaceZero =
true,
10167 #ifdef UA_ENABLE_TYPENAMES 10168 .memberName =
"issuedTokenType",
10170 .namespaceZero =
true,
10175 #ifdef UA_ENABLE_TYPENAMES 10176 .memberName =
"issuerEndpointUrl",
10178 .namespaceZero =
true,
10183 #ifdef UA_ENABLE_TYPENAMES 10184 .memberName =
"securityPolicyUri",
10186 .namespaceZero =
true,
10194 #ifdef UA_ENABLE_TYPENAMES 10195 .memberName =
"requestHeader",
10197 .namespaceZero =
true,
10202 #ifdef UA_ENABLE_TYPENAMES 10203 .memberName =
"subscriptionId",
10205 .namespaceZero =
true,
10210 #ifdef UA_ENABLE_TYPENAMES 10211 .memberName =
"monitoredItemIds",
10213 .namespaceZero =
true,
10221 #ifdef UA_ENABLE_TYPENAMES 10222 .memberName =
"specifiedAttributes",
10224 .namespaceZero =
true,
10229 #ifdef UA_ENABLE_TYPENAMES 10230 .memberName =
"displayName",
10232 .namespaceZero =
true,
10237 #ifdef UA_ENABLE_TYPENAMES 10238 .memberName =
"description",
10240 .namespaceZero =
true,
10245 #ifdef UA_ENABLE_TYPENAMES 10246 .memberName =
"writeMask",
10248 .namespaceZero =
true,
10253 #ifdef UA_ENABLE_TYPENAMES 10254 .memberName =
"userWriteMask",
10256 .namespaceZero =
true,
10261 #ifdef UA_ENABLE_TYPENAMES 10262 .memberName =
"isAbstract",
10264 .namespaceZero =
true,
10269 #ifdef UA_ENABLE_TYPENAMES 10270 .memberName =
"symmetric",
10272 .namespaceZero =
true,
10277 #ifdef UA_ENABLE_TYPENAMES 10278 .memberName =
"inverseName",
10280 .namespaceZero =
true,
10288 #ifdef UA_ENABLE_TYPENAMES 10289 .memberName =
"requestHeader",
10291 .namespaceZero =
true,
10296 #ifdef UA_ENABLE_TYPENAMES 10297 .memberName =
"subscriptionId",
10299 .namespaceZero =
true,
10304 #ifdef UA_ENABLE_TYPENAMES 10305 .memberName =
"monitoringMode",
10307 .namespaceZero =
true,
10312 #ifdef UA_ENABLE_TYPENAMES 10313 .memberName =
"monitoredItemIds",
10315 .namespaceZero =
true,
10323 #ifdef UA_ENABLE_TYPENAMES 10324 .memberName =
"responseHeader",
10326 .namespaceZero =
true,
10334 #ifdef UA_ENABLE_TYPENAMES 10335 .memberName =
"requestHeader",
10337 .namespaceZero =
true,
10342 #ifdef UA_ENABLE_TYPENAMES 10343 .memberName =
"nodesToWrite",
10345 .namespaceZero =
true,
10353 #ifdef UA_ENABLE_TYPENAMES 10354 .memberName =
"specifiedAttributes",
10356 .namespaceZero =
true,
10361 #ifdef UA_ENABLE_TYPENAMES 10362 .memberName =
"displayName",
10364 .namespaceZero =
true,
10369 #ifdef UA_ENABLE_TYPENAMES 10370 .memberName =
"description",
10372 .namespaceZero =
true,
10377 #ifdef UA_ENABLE_TYPENAMES 10378 .memberName =
"writeMask",
10380 .namespaceZero =
true,
10385 #ifdef UA_ENABLE_TYPENAMES 10386 .memberName =
"userWriteMask",
10388 .namespaceZero =
true,
10393 #ifdef UA_ENABLE_TYPENAMES 10394 .memberName =
"eventNotifier",
10396 .namespaceZero =
true,
10404 #ifdef UA_ENABLE_TYPENAMES 10405 .memberName =
"nodeId",
10407 .namespaceZero =
true,
10412 #ifdef UA_ENABLE_TYPENAMES 10413 .memberName =
"browseDirection",
10415 .namespaceZero =
true,
10420 #ifdef UA_ENABLE_TYPENAMES 10421 .memberName =
"referenceTypeId",
10423 .namespaceZero =
true,
10428 #ifdef UA_ENABLE_TYPENAMES 10429 .memberName =
"includeSubtypes",
10431 .namespaceZero =
true,
10436 #ifdef UA_ENABLE_TYPENAMES 10437 .memberName =
"nodeClassMask",
10439 .namespaceZero =
true,
10444 #ifdef UA_ENABLE_TYPENAMES 10445 .memberName =
"resultMask",
10447 .namespaceZero =
true,
10455 #ifdef UA_ENABLE_TYPENAMES 10456 .memberName =
"requestHeader",
10458 .namespaceZero =
true,
10463 #ifdef UA_ENABLE_TYPENAMES 10464 .memberName =
"subscriptionId",
10466 .namespaceZero =
true,
10471 #ifdef UA_ENABLE_TYPENAMES 10472 .memberName =
"retransmitSequenceNumber",
10474 .namespaceZero =
true,
10482 #ifdef UA_ENABLE_TYPENAMES 10483 .memberName =
"requestHeader",
10485 .namespaceZero =
true,
10490 #ifdef UA_ENABLE_TYPENAMES 10491 .memberName =
"endpointUrl",
10493 .namespaceZero =
true,
10498 #ifdef UA_ENABLE_TYPENAMES 10499 .memberName =
"localeIds",
10501 .namespaceZero =
true,
10506 #ifdef UA_ENABLE_TYPENAMES 10507 .memberName =
"profileUris",
10509 .namespaceZero =
true,
10517 #ifdef UA_ENABLE_TYPENAMES 10518 .memberName =
"requestHeader",
10520 .namespaceZero =
true,
10525 #ifdef UA_ENABLE_TYPENAMES 10526 .memberName =
"subscriptionAcknowledgements",
10528 .namespaceZero =
true,
10536 #ifdef UA_ENABLE_TYPENAMES 10537 .memberName =
"responseHeader",
10539 .namespaceZero =
true,
10544 #ifdef UA_ENABLE_TYPENAMES 10545 .memberName =
"results",
10547 .namespaceZero =
true,
10552 #ifdef UA_ENABLE_TYPENAMES 10553 .memberName =
"diagnosticInfos",
10555 .namespaceZero =
true,
10563 #ifdef UA_ENABLE_TYPENAMES 10564 .memberName =
"monitoredItems",
10566 .namespaceZero =
true,
10571 #ifdef UA_ENABLE_TYPENAMES 10572 .memberName =
"diagnosticInfos",
10574 .namespaceZero =
true,
10582 #ifdef UA_ENABLE_TYPENAMES 10583 .memberName =
"responseHeader",
10585 .namespaceZero =
true,
10593 #ifdef UA_ENABLE_TYPENAMES 10594 .memberName =
"requestHeader",
10596 .namespaceZero =
true,
10601 #ifdef UA_ENABLE_TYPENAMES 10602 .memberName =
"subscriptionId",
10604 .namespaceZero =
true,
10609 #ifdef UA_ENABLE_TYPENAMES 10610 .memberName =
"timestampsToReturn",
10612 .namespaceZero =
true,
10617 #ifdef UA_ENABLE_TYPENAMES 10618 .memberName =
"itemsToModify",
10620 .namespaceZero =
true,
10628 #ifdef UA_ENABLE_TYPENAMES 10629 .memberName =
"responseHeader",
10631 .namespaceZero =
true,
10636 #ifdef UA_ENABLE_TYPENAMES 10637 .memberName =
"results",
10639 .namespaceZero =
true,
10644 #ifdef UA_ENABLE_TYPENAMES 10645 .memberName =
"diagnosticInfos",
10647 .namespaceZero =
true,
10655 #ifdef UA_ENABLE_TYPENAMES 10656 .memberName =
"requestHeader",
10658 .namespaceZero =
true,
10663 #ifdef UA_ENABLE_TYPENAMES 10664 .memberName =
"endpointUrl",
10666 .namespaceZero =
true,
10671 #ifdef UA_ENABLE_TYPENAMES 10672 .memberName =
"localeIds",
10674 .namespaceZero =
true,
10679 #ifdef UA_ENABLE_TYPENAMES 10680 .memberName =
"serverUris",
10682 .namespaceZero =
true,
10690 #ifdef UA_ENABLE_TYPENAMES 10691 .memberName =
"referenceTypeId",
10693 .namespaceZero =
true,
10698 #ifdef UA_ENABLE_TYPENAMES 10699 .memberName =
"isForward",
10701 .namespaceZero =
true,
10706 #ifdef UA_ENABLE_TYPENAMES 10707 .memberName =
"nodeId",
10709 .namespaceZero =
true,
10714 #ifdef UA_ENABLE_TYPENAMES 10715 .memberName =
"browseName",
10717 .namespaceZero =
true,
10722 #ifdef UA_ENABLE_TYPENAMES 10723 .memberName =
"displayName",
10725 .namespaceZero =
true,
10730 #ifdef UA_ENABLE_TYPENAMES 10731 .memberName =
"nodeClass",
10733 .namespaceZero =
true,
10738 #ifdef UA_ENABLE_TYPENAMES 10739 .memberName =
"typeDefinition",
10741 .namespaceZero =
true,
10749 #ifdef UA_ENABLE_TYPENAMES 10750 .memberName =
"responseHeader",
10752 .namespaceZero =
true,
10757 #ifdef UA_ENABLE_TYPENAMES 10758 .memberName =
"results",
10760 .namespaceZero =
true,
10765 #ifdef UA_ENABLE_TYPENAMES 10766 .memberName =
"diagnosticInfos",
10768 .namespaceZero =
true,
10776 #ifdef UA_ENABLE_TYPENAMES 10777 .memberName =
"elementResults",
10779 .namespaceZero =
true,
10784 #ifdef UA_ENABLE_TYPENAMES 10785 .memberName =
"elementDiagnosticInfos",
10787 .namespaceZero =
true,
10795 #ifdef UA_ENABLE_TYPENAMES 10796 .memberName =
"sourceNodeId",
10798 .namespaceZero =
true,
10803 #ifdef UA_ENABLE_TYPENAMES 10804 .memberName =
"referenceTypeId",
10806 .namespaceZero =
true,
10811 #ifdef UA_ENABLE_TYPENAMES 10812 .memberName =
"isForward",
10814 .namespaceZero =
true,
10819 #ifdef UA_ENABLE_TYPENAMES 10820 .memberName =
"targetServerUri",
10822 .namespaceZero =
true,
10827 #ifdef UA_ENABLE_TYPENAMES 10828 .memberName =
"targetNodeId",
10830 .namespaceZero =
true,
10835 #ifdef UA_ENABLE_TYPENAMES 10836 .memberName =
"targetNodeClass",
10838 .namespaceZero =
true,
10846 #ifdef UA_ENABLE_TYPENAMES 10847 .memberName =
"responseHeader",
10849 .namespaceZero =
true,
10854 #ifdef UA_ENABLE_TYPENAMES 10855 .memberName =
"subscriptionId",
10857 .namespaceZero =
true,
10862 #ifdef UA_ENABLE_TYPENAMES 10863 .memberName =
"revisedPublishingInterval",
10865 .namespaceZero =
true,
10870 #ifdef UA_ENABLE_TYPENAMES 10871 .memberName =
"revisedLifetimeCount",
10873 .namespaceZero =
true,
10878 #ifdef UA_ENABLE_TYPENAMES 10879 .memberName =
"revisedMaxKeepAliveCount",
10881 .namespaceZero =
true,
10889 #ifdef UA_ENABLE_TYPENAMES 10890 .memberName =
"responseHeader",
10892 .namespaceZero =
true,
10897 #ifdef UA_ENABLE_TYPENAMES 10898 .memberName =
"results",
10900 .namespaceZero =
true,
10905 #ifdef UA_ENABLE_TYPENAMES 10906 .memberName =
"diagnosticInfos",
10908 .namespaceZero =
true,
10916 #ifdef UA_ENABLE_TYPENAMES 10917 .memberName =
"elements",
10919 .namespaceZero =
true,
10927 #ifdef UA_ENABLE_TYPENAMES 10928 .memberName =
"responseHeader",
10930 .namespaceZero =
true,
10935 #ifdef UA_ENABLE_TYPENAMES 10936 .memberName =
"results",
10938 .namespaceZero =
true,
10943 #ifdef UA_ENABLE_TYPENAMES 10944 .memberName =
"diagnosticInfos",
10946 .namespaceZero =
true,
10954 #ifdef UA_ENABLE_TYPENAMES 10955 .memberName =
"responseHeader",
10957 .namespaceZero =
true,
10962 #ifdef UA_ENABLE_TYPENAMES 10963 .memberName =
"results",
10965 .namespaceZero =
true,
10970 #ifdef UA_ENABLE_TYPENAMES 10971 .memberName =
"diagnosticInfos",
10973 .namespaceZero =
true,
10981 #ifdef UA_ENABLE_TYPENAMES 10982 .memberName =
"responseHeader",
10984 .namespaceZero =
true,
10989 #ifdef UA_ENABLE_TYPENAMES 10990 .memberName =
"results",
10992 .namespaceZero =
true,
10997 #ifdef UA_ENABLE_TYPENAMES 10998 .memberName =
"diagnosticInfos",
11000 .namespaceZero =
true,
11008 #ifdef UA_ENABLE_TYPENAMES 11009 .memberName =
"responseHeader",
11011 .namespaceZero =
true,
11016 #ifdef UA_ENABLE_TYPENAMES 11017 .memberName =
"results",
11019 .namespaceZero =
true,
11024 #ifdef UA_ENABLE_TYPENAMES 11025 .memberName =
"diagnosticInfos",
11027 .namespaceZero =
true,
11035 #ifdef UA_ENABLE_TYPENAMES 11036 .memberName =
"responseHeader",
11038 .namespaceZero =
true,
11043 #ifdef UA_ENABLE_TYPENAMES 11044 .memberName =
"notificationMessage",
11046 .namespaceZero =
true,
11054 #ifdef UA_ENABLE_TYPENAMES 11055 .memberName =
"itemToMonitor",
11057 .namespaceZero =
true,
11062 #ifdef UA_ENABLE_TYPENAMES 11063 .memberName =
"monitoringMode",
11065 .namespaceZero =
true,
11070 #ifdef UA_ENABLE_TYPENAMES 11071 .memberName =
"requestedParameters",
11073 .namespaceZero =
true,
11081 #ifdef UA_ENABLE_TYPENAMES 11082 .memberName =
"requestHeader",
11084 .namespaceZero =
true,
11089 #ifdef UA_ENABLE_TYPENAMES 11090 .memberName =
"referencesToDelete",
11092 .namespaceZero =
true,
11100 #ifdef UA_ENABLE_TYPENAMES 11101 .memberName =
"responseHeader",
11103 .namespaceZero =
true,
11108 #ifdef UA_ENABLE_TYPENAMES 11109 .memberName =
"results",
11111 .namespaceZero =
true,
11116 #ifdef UA_ENABLE_TYPENAMES 11117 .memberName =
"diagnosticInfos",
11119 .namespaceZero =
true,
11127 #ifdef UA_ENABLE_TYPENAMES 11128 .memberName =
"responseHeader",
11130 .namespaceZero =
true,
11135 #ifdef UA_ENABLE_TYPENAMES 11136 .memberName =
"results",
11138 .namespaceZero =
true,
11143 #ifdef UA_ENABLE_TYPENAMES 11144 .memberName =
"diagnosticInfos",
11146 .namespaceZero =
true,
11154 #ifdef UA_ENABLE_TYPENAMES 11155 .memberName =
"requestHeader",
11157 .namespaceZero =
true,
11162 #ifdef UA_ENABLE_TYPENAMES 11163 .memberName =
"referencesToAdd",
11165 .namespaceZero =
true,
11173 #ifdef UA_ENABLE_TYPENAMES 11174 .memberName =
"requestHeader",
11176 .namespaceZero =
true,
11181 #ifdef UA_ENABLE_TYPENAMES 11182 .memberName =
"maxAge",
11184 .namespaceZero =
true,
11189 #ifdef UA_ENABLE_TYPENAMES 11190 .memberName =
"timestampsToReturn",
11192 .namespaceZero =
true,
11197 #ifdef UA_ENABLE_TYPENAMES 11198 .memberName =
"nodesToRead",
11200 .namespaceZero =
true,
11208 #ifdef UA_ENABLE_TYPENAMES 11209 .memberName =
"parentNodeId",
11211 .namespaceZero =
true,
11216 #ifdef UA_ENABLE_TYPENAMES 11217 .memberName =
"referenceTypeId",
11219 .namespaceZero =
true,
11224 #ifdef UA_ENABLE_TYPENAMES 11225 .memberName =
"requestedNewNodeId",
11227 .namespaceZero =
true,
11232 #ifdef UA_ENABLE_TYPENAMES 11233 .memberName =
"browseName",
11235 .namespaceZero =
true,
11240 #ifdef UA_ENABLE_TYPENAMES 11241 .memberName =
"nodeClass",
11243 .namespaceZero =
true,
11248 #ifdef UA_ENABLE_TYPENAMES 11249 .memberName =
"nodeAttributes",
11251 .namespaceZero =
true,
11256 #ifdef UA_ENABLE_TYPENAMES 11257 .memberName =
"typeDefinition",
11259 .namespaceZero =
true,
11267 #ifdef UA_ENABLE_TYPENAMES 11268 .memberName =
"startTime",
11270 .namespaceZero =
true,
11275 #ifdef UA_ENABLE_TYPENAMES 11276 .memberName =
"currentTime",
11278 .namespaceZero =
true,
11283 #ifdef UA_ENABLE_TYPENAMES 11284 .memberName =
"state",
11286 .namespaceZero =
true,
11291 #ifdef UA_ENABLE_TYPENAMES 11292 .memberName =
"buildInfo",
11294 .namespaceZero =
true,
11299 #ifdef UA_ENABLE_TYPENAMES 11300 .memberName =
"secondsTillShutdown",
11302 .namespaceZero =
true,
11307 #ifdef UA_ENABLE_TYPENAMES 11308 .memberName =
"shutdownReason",
11310 .namespaceZero =
true,
11318 #ifdef UA_ENABLE_TYPENAMES 11319 .memberName =
"responseHeader",
11321 .namespaceZero =
true,
11326 #ifdef UA_ENABLE_TYPENAMES 11327 .memberName =
"results",
11329 .namespaceZero =
true,
11334 #ifdef UA_ENABLE_TYPENAMES 11335 .memberName =
"diagnosticInfos",
11337 .namespaceZero =
true,
11345 #ifdef UA_ENABLE_TYPENAMES 11346 .memberName =
"responseHeader",
11348 .namespaceZero =
true,
11353 #ifdef UA_ENABLE_TYPENAMES 11354 .memberName =
"results",
11356 .namespaceZero =
true,
11361 #ifdef UA_ENABLE_TYPENAMES 11362 .memberName =
"diagnosticInfos",
11364 .namespaceZero =
true,
11372 #ifdef UA_ENABLE_TYPENAMES 11373 .memberName =
"trigger",
11375 .namespaceZero =
true,
11380 #ifdef UA_ENABLE_TYPENAMES 11381 .memberName =
"deadbandType",
11383 .namespaceZero =
true,
11388 #ifdef UA_ENABLE_TYPENAMES 11389 .memberName =
"deadbandValue",
11391 .namespaceZero =
true,
11399 #ifdef UA_ENABLE_TYPENAMES 11400 .memberName =
"filterOperator",
11402 .namespaceZero =
true,
11407 #ifdef UA_ENABLE_TYPENAMES 11408 .memberName =
"filterOperands",
11410 .namespaceZero =
true,
11418 #ifdef UA_ENABLE_TYPENAMES 11419 .memberName =
"responseHeader",
11421 .namespaceZero =
true,
11429 #ifdef UA_ENABLE_TYPENAMES 11430 .memberName =
"applicationUri",
11432 .namespaceZero =
true,
11437 #ifdef UA_ENABLE_TYPENAMES 11438 .memberName =
"productUri",
11440 .namespaceZero =
true,
11445 #ifdef UA_ENABLE_TYPENAMES 11446 .memberName =
"applicationName",
11448 .namespaceZero =
true,
11453 #ifdef UA_ENABLE_TYPENAMES 11454 .memberName =
"applicationType",
11456 .namespaceZero =
true,
11461 #ifdef UA_ENABLE_TYPENAMES 11462 .memberName =
"gatewayServerUri",
11464 .namespaceZero =
true,
11469 #ifdef UA_ENABLE_TYPENAMES 11470 .memberName =
"discoveryProfileUri",
11472 .namespaceZero =
true,
11477 #ifdef UA_ENABLE_TYPENAMES 11478 .memberName =
"discoveryUrls",
11480 .namespaceZero =
true,
11488 #ifdef UA_ENABLE_TYPENAMES 11489 .memberName =
"responseHeader",
11491 .namespaceZero =
true,
11499 #ifdef UA_ENABLE_TYPENAMES 11500 .memberName =
"responseHeader",
11502 .namespaceZero =
true,
11507 #ifdef UA_ENABLE_TYPENAMES 11508 .memberName =
"servers",
11510 .namespaceZero =
true,
11518 #ifdef UA_ENABLE_TYPENAMES 11519 .memberName =
"requestHeader",
11521 .namespaceZero =
true,
11526 #ifdef UA_ENABLE_TYPENAMES 11527 .memberName =
"subscriptionId",
11529 .namespaceZero =
true,
11534 #ifdef UA_ENABLE_TYPENAMES 11535 .memberName =
"timestampsToReturn",
11537 .namespaceZero =
true,
11542 #ifdef UA_ENABLE_TYPENAMES 11543 .memberName =
"itemsToCreate",
11545 .namespaceZero =
true,
11553 #ifdef UA_ENABLE_TYPENAMES 11554 .memberName =
"elements",
11556 .namespaceZero =
true,
11564 #ifdef UA_ENABLE_TYPENAMES 11565 .memberName =
"responseHeader",
11567 .namespaceZero =
true,
11572 #ifdef UA_ENABLE_TYPENAMES 11573 .memberName =
"queryDataSets",
11575 .namespaceZero =
true,
11580 #ifdef UA_ENABLE_TYPENAMES 11581 .memberName =
"continuationPoint",
11583 .namespaceZero =
true,
11588 #ifdef UA_ENABLE_TYPENAMES 11589 .memberName =
"parsingResults",
11591 .namespaceZero =
true,
11596 #ifdef UA_ENABLE_TYPENAMES 11597 .memberName =
"diagnosticInfos",
11599 .namespaceZero =
true,
11604 #ifdef UA_ENABLE_TYPENAMES 11605 .memberName =
"filterResult",
11607 .namespaceZero =
true,
11615 #ifdef UA_ENABLE_TYPENAMES 11616 .memberName =
"requestHeader",
11618 .namespaceZero =
true,
11623 #ifdef UA_ENABLE_TYPENAMES 11624 .memberName =
"nodesToAdd",
11626 .namespaceZero =
true,
11634 #ifdef UA_ENABLE_TYPENAMES 11635 .memberName =
"requestHeader",
11637 .namespaceZero =
true,
11642 #ifdef UA_ENABLE_TYPENAMES 11643 .memberName =
"view",
11645 .namespaceZero =
true,
11650 #ifdef UA_ENABLE_TYPENAMES 11651 .memberName =
"requestedMaxReferencesPerNode",
11653 .namespaceZero =
true,
11658 #ifdef UA_ENABLE_TYPENAMES 11659 .memberName =
"nodesToBrowse",
11661 .namespaceZero =
true,
11669 #ifdef UA_ENABLE_TYPENAMES 11670 .memberName =
"startingNode",
11672 .namespaceZero =
true,
11677 #ifdef UA_ENABLE_TYPENAMES 11678 .memberName =
"relativePath",
11680 .namespaceZero =
true,
11688 #ifdef UA_ENABLE_TYPENAMES 11689 .memberName =
"statusCode",
11691 .namespaceZero =
true,
11696 #ifdef UA_ENABLE_TYPENAMES 11697 .memberName =
"continuationPoint",
11699 .namespaceZero =
true,
11704 #ifdef UA_ENABLE_TYPENAMES 11705 .memberName =
"references",
11707 .namespaceZero =
true,
11715 #ifdef UA_ENABLE_TYPENAMES 11716 .memberName =
"requestHeader",
11718 .namespaceZero =
true,
11723 #ifdef UA_ENABLE_TYPENAMES 11724 .memberName =
"clientDescription",
11726 .namespaceZero =
true,
11731 #ifdef UA_ENABLE_TYPENAMES 11732 .memberName =
"serverUri",
11734 .namespaceZero =
true,
11739 #ifdef UA_ENABLE_TYPENAMES 11740 .memberName =
"endpointUrl",
11742 .namespaceZero =
true,
11747 #ifdef UA_ENABLE_TYPENAMES 11748 .memberName =
"sessionName",
11750 .namespaceZero =
true,
11755 #ifdef UA_ENABLE_TYPENAMES 11756 .memberName =
"clientNonce",
11758 .namespaceZero =
true,
11763 #ifdef UA_ENABLE_TYPENAMES 11764 .memberName =
"clientCertificate",
11766 .namespaceZero =
true,
11771 #ifdef UA_ENABLE_TYPENAMES 11772 .memberName =
"requestedSessionTimeout",
11774 .namespaceZero =
true,
11779 #ifdef UA_ENABLE_TYPENAMES 11780 .memberName =
"maxResponseMessageSize",
11782 .namespaceZero =
true,
11790 #ifdef UA_ENABLE_TYPENAMES 11791 .memberName =
"relativePath",
11793 .namespaceZero =
true,
11798 #ifdef UA_ENABLE_TYPENAMES 11799 .memberName =
"attributeId",
11801 .namespaceZero =
true,
11806 #ifdef UA_ENABLE_TYPENAMES 11807 .memberName =
"indexRange",
11809 .namespaceZero =
true,
11817 #ifdef UA_ENABLE_TYPENAMES 11818 .memberName =
"endpointUrl",
11820 .namespaceZero =
true,
11825 #ifdef UA_ENABLE_TYPENAMES 11826 .memberName =
"server",
11828 .namespaceZero =
true,
11833 #ifdef UA_ENABLE_TYPENAMES 11834 .memberName =
"serverCertificate",
11836 .namespaceZero =
true,
11841 #ifdef UA_ENABLE_TYPENAMES 11842 .memberName =
"securityMode",
11844 .namespaceZero =
true,
11849 #ifdef UA_ENABLE_TYPENAMES 11850 .memberName =
"securityPolicyUri",
11852 .namespaceZero =
true,
11857 #ifdef UA_ENABLE_TYPENAMES 11858 .memberName =
"userIdentityTokens",
11860 .namespaceZero =
true,
11865 #ifdef UA_ENABLE_TYPENAMES 11866 .memberName =
"transportProfileUri",
11868 .namespaceZero =
true,
11873 #ifdef UA_ENABLE_TYPENAMES 11874 .memberName =
"securityLevel",
11876 .namespaceZero =
true,
11884 #ifdef UA_ENABLE_TYPENAMES 11885 .memberName =
"responseHeader",
11887 .namespaceZero =
true,
11892 #ifdef UA_ENABLE_TYPENAMES 11893 .memberName =
"endpoints",
11895 .namespaceZero =
true,
11903 #ifdef UA_ENABLE_TYPENAMES 11904 .memberName =
"typeDefinitionNode",
11906 .namespaceZero =
true,
11911 #ifdef UA_ENABLE_TYPENAMES 11912 .memberName =
"includeSubTypes",
11914 .namespaceZero =
true,
11919 #ifdef UA_ENABLE_TYPENAMES 11920 .memberName =
"dataToReturn",
11922 .namespaceZero =
true,
11930 #ifdef UA_ENABLE_TYPENAMES 11931 .memberName =
"responseHeader",
11933 .namespaceZero =
true,
11938 #ifdef UA_ENABLE_TYPENAMES 11939 .memberName =
"results",
11941 .namespaceZero =
true,
11946 #ifdef UA_ENABLE_TYPENAMES 11947 .memberName =
"diagnosticInfos",
11949 .namespaceZero =
true,
11957 #ifdef UA_ENABLE_TYPENAMES 11958 .memberName =
"requestHeader",
11960 .namespaceZero =
true,
11965 #ifdef UA_ENABLE_TYPENAMES 11966 .memberName =
"browsePaths",
11968 .namespaceZero =
true,
11976 #ifdef UA_ENABLE_TYPENAMES 11977 .memberName =
"responseHeader",
11979 .namespaceZero =
true,
11984 #ifdef UA_ENABLE_TYPENAMES 11985 .memberName =
"results",
11987 .namespaceZero =
true,
11992 #ifdef UA_ENABLE_TYPENAMES 11993 .memberName =
"diagnosticInfos",
11995 .namespaceZero =
true,
12003 #ifdef UA_ENABLE_TYPENAMES 12004 .memberName =
"responseHeader",
12006 .namespaceZero =
true,
12011 #ifdef UA_ENABLE_TYPENAMES 12012 .memberName =
"sessionId",
12014 .namespaceZero =
true,
12019 #ifdef UA_ENABLE_TYPENAMES 12020 .memberName =
"authenticationToken",
12022 .namespaceZero =
true,
12027 #ifdef UA_ENABLE_TYPENAMES 12028 .memberName =
"revisedSessionTimeout",
12030 .namespaceZero =
true,
12035 #ifdef UA_ENABLE_TYPENAMES 12036 .memberName =
"serverNonce",
12038 .namespaceZero =
true,
12043 #ifdef UA_ENABLE_TYPENAMES 12044 .memberName =
"serverCertificate",
12046 .namespaceZero =
true,
12051 #ifdef UA_ENABLE_TYPENAMES 12052 .memberName =
"serverEndpoints",
12054 .namespaceZero =
true,
12059 #ifdef UA_ENABLE_TYPENAMES 12060 .memberName =
"serverSoftwareCertificates",
12062 .namespaceZero =
true,
12067 #ifdef UA_ENABLE_TYPENAMES 12068 .memberName =
"serverSignature",
12070 .namespaceZero =
true,
12075 #ifdef UA_ENABLE_TYPENAMES 12076 .memberName =
"maxRequestMessageSize",
12078 .namespaceZero =
true,
12086 #ifdef UA_ENABLE_TYPENAMES 12087 .memberName =
"requestHeader",
12089 .namespaceZero =
true,
12094 #ifdef UA_ENABLE_TYPENAMES 12095 .memberName =
"view",
12097 .namespaceZero =
true,
12102 #ifdef UA_ENABLE_TYPENAMES 12103 .memberName =
"nodeTypes",
12105 .namespaceZero =
true,
12110 #ifdef UA_ENABLE_TYPENAMES 12111 .memberName =
"filter",
12113 .namespaceZero =
true,
12118 #ifdef UA_ENABLE_TYPENAMES 12119 .memberName =
"maxDataSetsToReturn",
12121 .namespaceZero =
true,
12126 #ifdef UA_ENABLE_TYPENAMES 12127 .memberName =
"maxReferencesToReturn",
12129 .namespaceZero =
true,
12138 #ifdef UA_ENABLE_TYPENAMES 12139 .typeName =
"Boolean",
12144 .overlayable =
true,
12145 .binaryEncodingId = 0,
12147 .members = Boolean_members },
12150 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 2},
12152 #ifdef UA_ENABLE_TYPENAMES 12153 .typeName =
"SByte",
12158 .overlayable =
true,
12159 .binaryEncodingId = 0,
12161 .members = SByte_members },
12164 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 3},
12166 #ifdef UA_ENABLE_TYPENAMES 12167 .typeName =
"Byte",
12172 .overlayable =
true,
12173 .binaryEncodingId = 0,
12175 .members = Byte_members },
12178 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 4},
12180 #ifdef UA_ENABLE_TYPENAMES 12181 .typeName =
"Int16",
12187 .binaryEncodingId = 0,
12189 .members = Int16_members },
12192 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 5},
12194 #ifdef UA_ENABLE_TYPENAMES 12195 .typeName =
"UInt16",
12201 .binaryEncodingId = 0,
12203 .members = UInt16_members },
12206 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12208 #ifdef UA_ENABLE_TYPENAMES 12209 .typeName =
"Int32",
12215 .binaryEncodingId = 0,
12217 .members = Int32_members },
12220 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 7},
12222 #ifdef UA_ENABLE_TYPENAMES 12223 .typeName =
"UInt32",
12229 .binaryEncodingId = 0,
12231 .members = UInt32_members },
12234 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 8},
12236 #ifdef UA_ENABLE_TYPENAMES 12237 .typeName =
"Int64",
12243 .binaryEncodingId = 0,
12245 .members = Int64_members },
12248 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 9},
12250 #ifdef UA_ENABLE_TYPENAMES 12251 .typeName =
"UInt64",
12257 .binaryEncodingId = 0,
12259 .members = UInt64_members },
12262 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 10},
12264 #ifdef UA_ENABLE_TYPENAMES 12265 .typeName =
"Float",
12271 .binaryEncodingId = 0,
12273 .members = Float_members },
12276 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 11},
12278 #ifdef UA_ENABLE_TYPENAMES 12279 .typeName =
"Double",
12285 .binaryEncodingId = 0,
12287 .members = Double_members },
12290 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 12},
12292 #ifdef UA_ENABLE_TYPENAMES 12293 .typeName =
"String",
12297 .fixedSize =
false,
12298 .overlayable =
false,
12299 .binaryEncodingId = 0,
12301 .members = String_members },
12304 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 13},
12306 #ifdef UA_ENABLE_TYPENAMES 12307 .typeName =
"DateTime",
12313 .binaryEncodingId = 0,
12315 .members = DateTime_members },
12318 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 14},
12320 #ifdef UA_ENABLE_TYPENAMES 12321 .typeName =
"Guid",
12327 .binaryEncodingId = 0,
12329 .members = Guid_members },
12332 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 15},
12334 #ifdef UA_ENABLE_TYPENAMES 12335 .typeName =
"ByteString",
12339 .fixedSize =
false,
12340 .overlayable =
false,
12341 .binaryEncodingId = 0,
12343 .members = ByteString_members },
12346 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 16},
12348 #ifdef UA_ENABLE_TYPENAMES 12349 .typeName =
"XmlElement",
12353 .fixedSize =
false,
12354 .overlayable =
false,
12355 .binaryEncodingId = 0,
12357 .members = XmlElement_members },
12360 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 17},
12362 #ifdef UA_ENABLE_TYPENAMES 12363 .typeName =
"NodeId",
12367 .fixedSize =
false,
12368 .overlayable =
false,
12369 .binaryEncodingId = 0,
12371 .members = NodeId_members },
12374 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 18},
12376 #ifdef UA_ENABLE_TYPENAMES 12377 .typeName =
"ExpandedNodeId",
12381 .fixedSize =
false,
12382 .overlayable =
false,
12383 .binaryEncodingId = 0,
12385 .members = ExpandedNodeId_members },
12388 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 19},
12390 #ifdef UA_ENABLE_TYPENAMES 12391 .typeName =
"StatusCode",
12397 .binaryEncodingId = 0,
12399 .members = StatusCode_members },
12402 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 20},
12404 #ifdef UA_ENABLE_TYPENAMES 12405 .typeName =
"QualifiedName",
12409 .fixedSize =
false,
12410 .overlayable =
false,
12411 .binaryEncodingId = 0,
12413 .members = QualifiedName_members },
12416 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 21},
12418 #ifdef UA_ENABLE_TYPENAMES 12419 .typeName =
"LocalizedText",
12423 .fixedSize =
false,
12424 .overlayable =
false,
12425 .binaryEncodingId = 0,
12427 .members = LocalizedText_members },
12430 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 22},
12432 #ifdef UA_ENABLE_TYPENAMES 12433 .typeName =
"ExtensionObject",
12437 .fixedSize =
false,
12438 .overlayable =
false,
12439 .binaryEncodingId = 0,
12441 .members = ExtensionObject_members },
12444 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 23},
12446 #ifdef UA_ENABLE_TYPENAMES 12447 .typeName =
"DataValue",
12451 .fixedSize =
false,
12452 .overlayable =
false,
12453 .binaryEncodingId = 0,
12455 .members = DataValue_members },
12458 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 24},
12460 #ifdef UA_ENABLE_TYPENAMES 12461 .typeName =
"Variant",
12465 .fixedSize =
false,
12466 .overlayable =
false,
12467 .binaryEncodingId = 0,
12469 .members = Variant_members },
12472 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 25},
12474 #ifdef UA_ENABLE_TYPENAMES 12475 .typeName =
"DiagnosticInfo",
12479 .fixedSize =
false,
12480 .overlayable =
false,
12481 .binaryEncodingId = 0,
12483 .members = DiagnosticInfo_members },
12486 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 344},
12488 #ifdef UA_ENABLE_TYPENAMES 12489 .typeName =
"SignedSoftwareCertificate",
12493 .fixedSize =
false,
12494 .overlayable =
false,
12495 .binaryEncodingId = 346,
12497 .members = SignedSoftwareCertificate_members },
12500 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 546},
12502 #ifdef UA_ENABLE_TYPENAMES 12503 .typeName =
"BrowsePathTarget",
12507 .fixedSize =
false,
12508 .overlayable =
false,
12509 .binaryEncodingId = 548,
12511 .members = BrowsePathTarget_members },
12514 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 373},
12516 #ifdef UA_ENABLE_TYPENAMES 12517 .typeName =
"ViewAttributes",
12521 .fixedSize =
false,
12522 .overlayable =
false,
12523 .binaryEncodingId = 375,
12525 .members = ViewAttributes_members },
12528 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12530 #ifdef UA_ENABLE_TYPENAMES 12531 .typeName =
"BrowseResultMask",
12537 .binaryEncodingId = 0,
12539 .members = BrowseResultMask_members },
12542 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 389},
12544 #ifdef UA_ENABLE_TYPENAMES 12545 .typeName =
"RequestHeader",
12549 .fixedSize =
false,
12550 .overlayable =
false,
12551 .binaryEncodingId = 391,
12553 .members = RequestHeader_members },
12556 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 758},
12558 #ifdef UA_ENABLE_TYPENAMES 12559 .typeName =
"MonitoredItemModifyResult",
12563 .fixedSize =
false,
12564 .overlayable =
false,
12565 .binaryEncodingId = 760,
12567 .members = MonitoredItemModifyResult_members },
12570 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 450},
12572 #ifdef UA_ENABLE_TYPENAMES 12573 .typeName =
"CloseSecureChannelRequest",
12577 .fixedSize =
false,
12578 .overlayable =
false,
12579 .binaryEncodingId = 452,
12581 .members = CloseSecureChannelRequest_members },
12584 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 483},
12586 #ifdef UA_ENABLE_TYPENAMES 12587 .typeName =
"AddNodesResult",
12591 .fixedSize =
false,
12592 .overlayable =
false,
12593 .binaryEncodingId = 485,
12595 .members = AddNodesResult_members },
12598 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 355},
12600 #ifdef UA_ENABLE_TYPENAMES 12601 .typeName =
"VariableAttributes",
12605 .fixedSize =
false,
12606 .overlayable =
false,
12607 .binaryEncodingId = 357,
12609 .members = VariableAttributes_members },
12612 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 803},
12614 #ifdef UA_ENABLE_TYPENAMES 12615 .typeName =
"NotificationMessage",
12619 .fixedSize =
false,
12620 .overlayable =
false,
12621 .binaryEncodingId = 805,
12623 .members = NotificationMessage_members },
12626 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12628 #ifdef UA_ENABLE_TYPENAMES 12629 .typeName =
"NodeAttributesMask",
12635 .binaryEncodingId = 0,
12637 .members = NodeAttributesMask_members },
12640 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12642 #ifdef UA_ENABLE_TYPENAMES 12643 .typeName =
"MonitoringMode",
12649 .binaryEncodingId = 0,
12651 .members = MonitoringMode_members },
12654 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 707},
12656 #ifdef UA_ENABLE_TYPENAMES 12657 .typeName =
"CallMethodResult",
12661 .fixedSize =
false,
12662 .overlayable =
false,
12663 .binaryEncodingId = 709,
12665 .members = CallMethodResult_members },
12668 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 610},
12670 #ifdef UA_ENABLE_TYPENAMES 12671 .typeName =
"ParsingResult",
12675 .fixedSize =
false,
12676 .overlayable =
false,
12677 .binaryEncodingId = 612,
12679 .members = ParsingResult_members },
12682 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 537},
12684 #ifdef UA_ENABLE_TYPENAMES 12685 .typeName =
"RelativePathElement",
12689 .fixedSize =
false,
12690 .overlayable =
false,
12691 .binaryEncodingId = 539,
12693 .members = RelativePathElement_members },
12696 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12698 #ifdef UA_ENABLE_TYPENAMES 12699 .typeName =
"BrowseDirection",
12705 .binaryEncodingId = 0,
12707 .members = BrowseDirection_members },
12710 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 704},
12712 #ifdef UA_ENABLE_TYPENAMES 12713 .typeName =
"CallMethodRequest",
12717 .fixedSize =
false,
12718 .overlayable =
false,
12719 .binaryEncodingId = 706,
12721 .members = CallMethodRequest_members },
12724 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 564},
12726 #ifdef UA_ENABLE_TYPENAMES 12727 .typeName =
"UnregisterNodesRequest",
12731 .fixedSize =
false,
12732 .overlayable =
false,
12733 .binaryEncodingId = 566,
12735 .members = UnregisterNodesRequest_members },
12738 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 604},
12740 #ifdef UA_ENABLE_TYPENAMES 12741 .typeName =
"ContentFilterElementResult",
12745 .fixedSize =
false,
12746 .overlayable =
false,
12747 .binaryEncodingId = 606,
12749 .members = ContentFilterElementResult_members },
12752 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 577},
12754 #ifdef UA_ENABLE_TYPENAMES 12755 .typeName =
"QueryDataSet",
12759 .fixedSize =
false,
12760 .overlayable =
false,
12761 .binaryEncodingId = 579,
12763 .members = QueryDataSet_members },
12766 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 319},
12768 #ifdef UA_ENABLE_TYPENAMES 12769 .typeName =
"AnonymousIdentityToken",
12773 .fixedSize =
false,
12774 .overlayable =
false,
12775 .binaryEncodingId = 321,
12777 .members = AnonymousIdentityToken_members },
12780 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 797},
12782 #ifdef UA_ENABLE_TYPENAMES 12783 .typeName =
"SetPublishingModeRequest",
12787 .fixedSize =
false,
12788 .overlayable =
false,
12789 .binaryEncodingId = 799,
12791 .members = SetPublishingModeRequest_members },
12794 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12796 #ifdef UA_ENABLE_TYPENAMES 12797 .typeName =
"TimestampsToReturn",
12803 .binaryEncodingId = 0,
12805 .members = TimestampsToReturn_members },
12808 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 710},
12810 #ifdef UA_ENABLE_TYPENAMES 12811 .typeName =
"CallRequest",
12815 .fixedSize =
false,
12816 .overlayable =
false,
12817 .binaryEncodingId = 712,
12819 .members = CallRequest_members },
12822 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 358},
12824 #ifdef UA_ENABLE_TYPENAMES 12825 .typeName =
"MethodAttributes",
12829 .fixedSize =
false,
12830 .overlayable =
false,
12831 .binaryEncodingId = 360,
12833 .members = MethodAttributes_members },
12836 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 385},
12838 #ifdef UA_ENABLE_TYPENAMES 12839 .typeName =
"DeleteReferencesItem",
12843 .fixedSize =
false,
12844 .overlayable =
false,
12845 .binaryEncodingId = 387,
12847 .members = DeleteReferencesItem_members },
12850 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 668},
12852 #ifdef UA_ENABLE_TYPENAMES 12853 .typeName =
"WriteValue",
12857 .fixedSize =
false,
12858 .overlayable =
false,
12859 .binaryEncodingId = 670,
12861 .members = WriteValue_members },
12864 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 746},
12866 #ifdef UA_ENABLE_TYPENAMES 12867 .typeName =
"MonitoredItemCreateResult",
12871 .fixedSize =
false,
12872 .overlayable =
false,
12873 .binaryEncodingId = 748,
12875 .members = MonitoredItemCreateResult_members },
12878 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12880 #ifdef UA_ENABLE_TYPENAMES 12881 .typeName =
"MessageSecurityMode",
12887 .binaryEncodingId = 0,
12889 .members = MessageSecurityMode_members },
12892 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 740},
12894 #ifdef UA_ENABLE_TYPENAMES 12895 .typeName =
"MonitoringParameters",
12899 .fixedSize =
false,
12900 .overlayable =
false,
12901 .binaryEncodingId = 742,
12903 .members = MonitoringParameters_members },
12906 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 456},
12908 #ifdef UA_ENABLE_TYPENAMES 12909 .typeName =
"SignatureData",
12913 .fixedSize =
false,
12914 .overlayable =
false,
12915 .binaryEncodingId = 458,
12917 .members = SignatureData_members },
12920 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 285},
12922 #ifdef UA_ENABLE_TYPENAMES 12923 .typeName =
"ReferenceNode",
12927 .fixedSize =
false,
12928 .overlayable =
false,
12929 .binaryEncodingId = 287,
12931 .members = ReferenceNode_members },
12934 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 296},
12936 #ifdef UA_ENABLE_TYPENAMES 12937 .typeName =
"Argument",
12941 .fixedSize =
false,
12942 .overlayable =
false,
12943 .binaryEncodingId = 298,
12945 .members = Argument_members },
12948 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 316},
12950 #ifdef UA_ENABLE_TYPENAMES 12951 .typeName =
"UserIdentityToken",
12955 .fixedSize =
false,
12956 .overlayable =
false,
12957 .binaryEncodingId = 318,
12959 .members = UserIdentityToken_members },
12962 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 361},
12964 #ifdef UA_ENABLE_TYPENAMES 12965 .typeName =
"ObjectTypeAttributes",
12969 .fixedSize =
false,
12970 .overlayable =
false,
12971 .binaryEncodingId = 363,
12973 .members = ObjectTypeAttributes_members },
12976 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12978 #ifdef UA_ENABLE_TYPENAMES 12979 .typeName =
"DeadbandType",
12985 .binaryEncodingId = 0,
12987 .members = DeadbandType_members },
12990 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12992 #ifdef UA_ENABLE_TYPENAMES 12993 .typeName =
"SecurityTokenRequestType",
12999 .binaryEncodingId = 0,
13001 .members = SecurityTokenRequestType_members },
13004 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13006 #ifdef UA_ENABLE_TYPENAMES 13007 .typeName =
"DataChangeTrigger",
13013 .binaryEncodingId = 0,
13015 .members = DataChangeTrigger_members },
13018 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 338},
13020 #ifdef UA_ENABLE_TYPENAMES 13021 .typeName =
"BuildInfo",
13025 .fixedSize =
false,
13026 .overlayable =
false,
13027 .binaryEncodingId = 340,
13029 .members = BuildInfo_members },
13032 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13034 #ifdef UA_ENABLE_TYPENAMES 13035 .typeName =
"NodeClass",
13041 .binaryEncodingId = 0,
13043 .members = NodeClass_members },
13046 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 441},
13048 #ifdef UA_ENABLE_TYPENAMES 13049 .typeName =
"ChannelSecurityToken",
13055 .binaryEncodingId = 443,
13057 .members = ChannelSecurityToken_members },
13060 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 806},
13062 #ifdef UA_ENABLE_TYPENAMES 13063 .typeName =
"MonitoredItemNotification",
13067 .fixedSize =
false,
13068 .overlayable =
false,
13069 .binaryEncodingId = 808,
13071 .members = MonitoredItemNotification_members },
13074 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 382},
13076 #ifdef UA_ENABLE_TYPENAMES 13077 .typeName =
"DeleteNodesItem",
13081 .fixedSize =
false,
13082 .overlayable =
false,
13083 .binaryEncodingId = 384,
13085 .members = DeleteNodesItem_members },
13088 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 821},
13090 #ifdef UA_ENABLE_TYPENAMES 13091 .typeName =
"SubscriptionAcknowledgement",
13097 .binaryEncodingId = 823,
13099 .members = SubscriptionAcknowledgement_members },
13102 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 626},
13104 #ifdef UA_ENABLE_TYPENAMES 13105 .typeName =
"ReadValueId",
13109 .fixedSize =
false,
13110 .overlayable =
false,
13111 .binaryEncodingId = 628,
13113 .members = ReadValueId_members },
13116 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 370},
13118 #ifdef UA_ENABLE_TYPENAMES 13119 .typeName =
"DataTypeAttributes",
13123 .fixedSize =
false,
13124 .overlayable =
false,
13125 .binaryEncodingId = 372,
13127 .members = DataTypeAttributes_members },
13130 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 392},
13132 #ifdef UA_ENABLE_TYPENAMES 13133 .typeName =
"ResponseHeader",
13137 .fixedSize =
false,
13138 .overlayable =
false,
13139 .binaryEncodingId = 394,
13141 .members = ResponseHeader_members },
13144 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 845},
13146 #ifdef UA_ENABLE_TYPENAMES 13147 .typeName =
"DeleteSubscriptionsRequest",
13151 .fixedSize =
false,
13152 .overlayable =
false,
13153 .binaryEncodingId = 847,
13155 .members = DeleteSubscriptionsRequest_members },
13158 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 511},
13160 #ifdef UA_ENABLE_TYPENAMES 13161 .typeName =
"ViewDescription",
13165 .fixedSize =
false,
13166 .overlayable =
false,
13167 .binaryEncodingId = 513,
13169 .members = ViewDescription_members },
13172 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 782},
13174 #ifdef UA_ENABLE_TYPENAMES 13175 .typeName =
"DeleteMonitoredItemsResponse",
13179 .fixedSize =
false,
13180 .overlayable =
false,
13181 .binaryEncodingId = 784,
13183 .members = DeleteMonitoredItemsResponse_members },
13186 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 349},
13188 #ifdef UA_ENABLE_TYPENAMES 13189 .typeName =
"NodeAttributes",
13193 .fixedSize =
false,
13194 .overlayable =
false,
13195 .binaryEncodingId = 351,
13197 .members = NodeAttributes_members },
13200 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 558},
13202 #ifdef UA_ENABLE_TYPENAMES 13203 .typeName =
"RegisterNodesRequest",
13207 .fixedSize =
false,
13208 .overlayable =
false,
13209 .binaryEncodingId = 560,
13211 .members = RegisterNodesRequest_members },
13214 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 498},
13216 #ifdef UA_ENABLE_TYPENAMES 13217 .typeName =
"DeleteNodesRequest",
13221 .fixedSize =
false,
13222 .overlayable =
false,
13223 .binaryEncodingId = 500,
13225 .members = DeleteNodesRequest_members },
13228 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 827},
13230 #ifdef UA_ENABLE_TYPENAMES 13231 .typeName =
"PublishResponse",
13235 .fixedSize =
false,
13236 .overlayable =
false,
13237 .binaryEncodingId = 829,
13239 .members = PublishResponse_members },
13242 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 755},
13244 #ifdef UA_ENABLE_TYPENAMES 13245 .typeName =
"MonitoredItemModifyRequest",
13249 .fixedSize =
false,
13250 .overlayable =
false,
13251 .binaryEncodingId = 757,
13253 .members = MonitoredItemModifyRequest_members },
13256 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 322},
13258 #ifdef UA_ENABLE_TYPENAMES 13259 .typeName =
"UserNameIdentityToken",
13263 .fixedSize =
false,
13264 .overlayable =
false,
13265 .binaryEncodingId = 324,
13267 .members = UserNameIdentityToken_members },
13270 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13272 #ifdef UA_ENABLE_TYPENAMES 13273 .typeName =
"IdType",
13279 .binaryEncodingId = 0,
13281 .members = IdType_members },
13284 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13286 #ifdef UA_ENABLE_TYPENAMES 13287 .typeName =
"UserTokenType",
13293 .binaryEncodingId = 0,
13295 .members = UserTokenType_members },
13298 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 465},
13300 #ifdef UA_ENABLE_TYPENAMES 13301 .typeName =
"ActivateSessionRequest",
13305 .fixedSize =
false,
13306 .overlayable =
false,
13307 .binaryEncodingId = 467,
13309 .members = ActivateSessionRequest_members },
13312 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 447},
13314 #ifdef UA_ENABLE_TYPENAMES 13315 .typeName =
"OpenSecureChannelResponse",
13319 .fixedSize =
false,
13320 .overlayable =
false,
13321 .binaryEncodingId = 449,
13323 .members = OpenSecureChannelResponse_members },
13326 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13328 #ifdef UA_ENABLE_TYPENAMES 13329 .typeName =
"ApplicationType",
13335 .binaryEncodingId = 0,
13337 .members = ApplicationType_members },
13340 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13342 #ifdef UA_ENABLE_TYPENAMES 13343 .typeName =
"ServerState",
13349 .binaryEncodingId = 0,
13351 .members = ServerState_members },
13354 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 622},
13356 #ifdef UA_ENABLE_TYPENAMES 13357 .typeName =
"QueryNextResponse",
13361 .fixedSize =
false,
13362 .overlayable =
false,
13363 .binaryEncodingId = 624,
13365 .members = QueryNextResponse_members },
13368 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 468},
13370 #ifdef UA_ENABLE_TYPENAMES 13371 .typeName =
"ActivateSessionResponse",
13375 .fixedSize =
false,
13376 .overlayable =
false,
13377 .binaryEncodingId = 470,
13379 .members = ActivateSessionResponse_members },
13382 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13384 #ifdef UA_ENABLE_TYPENAMES 13385 .typeName =
"FilterOperator",
13391 .binaryEncodingId = 0,
13393 .members = FilterOperator_members },
13396 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 619},
13398 #ifdef UA_ENABLE_TYPENAMES 13399 .typeName =
"QueryNextRequest",
13403 .fixedSize =
false,
13404 .overlayable =
false,
13405 .binaryEncodingId = 621,
13407 .members = QueryNextRequest_members },
13410 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 674},
13412 #ifdef UA_ENABLE_TYPENAMES 13413 .typeName =
"WriteResponse",
13417 .fixedSize =
false,
13418 .overlayable =
false,
13419 .binaryEncodingId = 676,
13421 .members = WriteResponse_members },
13424 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 531},
13426 #ifdef UA_ENABLE_TYPENAMES 13427 .typeName =
"BrowseNextRequest",
13431 .fixedSize =
false,
13432 .overlayable =
false,
13433 .binaryEncodingId = 533,
13435 .members = BrowseNextRequest_members },
13438 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 785},
13440 #ifdef UA_ENABLE_TYPENAMES 13441 .typeName =
"CreateSubscriptionRequest",
13445 .fixedSize =
false,
13446 .overlayable =
false,
13447 .binaryEncodingId = 787,
13449 .members = CreateSubscriptionRequest_members },
13452 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 364},
13454 #ifdef UA_ENABLE_TYPENAMES 13455 .typeName =
"VariableTypeAttributes",
13459 .fixedSize =
false,
13460 .overlayable =
false,
13461 .binaryEncodingId = 366,
13463 .members = VariableTypeAttributes_members },
13466 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 549},
13468 #ifdef UA_ENABLE_TYPENAMES 13469 .typeName =
"BrowsePathResult",
13473 .fixedSize =
false,
13474 .overlayable =
false,
13475 .binaryEncodingId = 551,
13477 .members = BrowsePathResult_members },
13480 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 794},
13482 #ifdef UA_ENABLE_TYPENAMES 13483 .typeName =
"ModifySubscriptionResponse",
13487 .fixedSize =
false,
13488 .overlayable =
false,
13489 .binaryEncodingId = 796,
13491 .members = ModifySubscriptionResponse_members },
13494 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 444},
13496 #ifdef UA_ENABLE_TYPENAMES 13497 .typeName =
"OpenSecureChannelRequest",
13501 .fixedSize =
false,
13502 .overlayable =
false,
13503 .binaryEncodingId = 446,
13505 .members = OpenSecureChannelRequest_members },
13508 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 561},
13510 #ifdef UA_ENABLE_TYPENAMES 13511 .typeName =
"RegisterNodesResponse",
13515 .fixedSize =
false,
13516 .overlayable =
false,
13517 .binaryEncodingId = 563,
13519 .members = RegisterNodesResponse_members },
13522 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 471},
13524 #ifdef UA_ENABLE_TYPENAMES 13525 .typeName =
"CloseSessionRequest",
13529 .fixedSize =
false,
13530 .overlayable =
false,
13531 .binaryEncodingId = 473,
13533 .members = CloseSessionRequest_members },
13536 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 791},
13538 #ifdef UA_ENABLE_TYPENAMES 13539 .typeName =
"ModifySubscriptionRequest",
13543 .fixedSize =
false,
13544 .overlayable =
false,
13545 .binaryEncodingId = 793,
13547 .members = ModifySubscriptionRequest_members },
13550 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 304},
13552 #ifdef UA_ENABLE_TYPENAMES 13553 .typeName =
"UserTokenPolicy",
13557 .fixedSize =
false,
13558 .overlayable =
false,
13559 .binaryEncodingId = 306,
13561 .members = UserTokenPolicy_members },
13564 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 779},
13566 #ifdef UA_ENABLE_TYPENAMES 13567 .typeName =
"DeleteMonitoredItemsRequest",
13571 .fixedSize =
false,
13572 .overlayable =
false,
13573 .binaryEncodingId = 781,
13575 .members = DeleteMonitoredItemsRequest_members },
13578 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 367},
13580 #ifdef UA_ENABLE_TYPENAMES 13581 .typeName =
"ReferenceTypeAttributes",
13585 .fixedSize =
false,
13586 .overlayable =
false,
13587 .binaryEncodingId = 369,
13589 .members = ReferenceTypeAttributes_members },
13592 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 767},
13594 #ifdef UA_ENABLE_TYPENAMES 13595 .typeName =
"SetMonitoringModeRequest",
13599 .fixedSize =
false,
13600 .overlayable =
false,
13601 .binaryEncodingId = 769,
13603 .members = SetMonitoringModeRequest_members },
13606 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 567},
13608 #ifdef UA_ENABLE_TYPENAMES 13609 .typeName =
"UnregisterNodesResponse",
13613 .fixedSize =
false,
13614 .overlayable =
false,
13615 .binaryEncodingId = 569,
13617 .members = UnregisterNodesResponse_members },
13620 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 671},
13622 #ifdef UA_ENABLE_TYPENAMES 13623 .typeName =
"WriteRequest",
13627 .fixedSize =
false,
13628 .overlayable =
false,
13629 .binaryEncodingId = 673,
13631 .members = WriteRequest_members },
13634 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 352},
13636 #ifdef UA_ENABLE_TYPENAMES 13637 .typeName =
"ObjectAttributes",
13641 .fixedSize =
false,
13642 .overlayable =
false,
13643 .binaryEncodingId = 354,
13645 .members = ObjectAttributes_members },
13648 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 514},
13650 #ifdef UA_ENABLE_TYPENAMES 13651 .typeName =
"BrowseDescription",
13655 .fixedSize =
false,
13656 .overlayable =
false,
13657 .binaryEncodingId = 516,
13659 .members = BrowseDescription_members },
13662 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 830},
13664 #ifdef UA_ENABLE_TYPENAMES 13665 .typeName =
"RepublishRequest",
13669 .fixedSize =
false,
13670 .overlayable =
false,
13671 .binaryEncodingId = 832,
13673 .members = RepublishRequest_members },
13676 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 426},
13678 #ifdef UA_ENABLE_TYPENAMES 13679 .typeName =
"GetEndpointsRequest",
13683 .fixedSize =
false,
13684 .overlayable =
false,
13685 .binaryEncodingId = 428,
13687 .members = GetEndpointsRequest_members },
13690 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 824},
13692 #ifdef UA_ENABLE_TYPENAMES 13693 .typeName =
"PublishRequest",
13697 .fixedSize =
false,
13698 .overlayable =
false,
13699 .binaryEncodingId = 826,
13701 .members = PublishRequest_members },
13704 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 489},
13706 #ifdef UA_ENABLE_TYPENAMES 13707 .typeName =
"AddNodesResponse",
13711 .fixedSize =
false,
13712 .overlayable =
false,
13713 .binaryEncodingId = 491,
13715 .members = AddNodesResponse_members },
13718 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 809},
13720 #ifdef UA_ENABLE_TYPENAMES 13721 .typeName =
"DataChangeNotification",
13725 .fixedSize =
false,
13726 .overlayable =
false,
13727 .binaryEncodingId = 811,
13729 .members = DataChangeNotification_members },
13732 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 453},
13734 #ifdef UA_ENABLE_TYPENAMES 13735 .typeName =
"CloseSecureChannelResponse",
13739 .fixedSize =
false,
13740 .overlayable =
false,
13741 .binaryEncodingId = 455,
13743 .members = CloseSecureChannelResponse_members },
13746 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 761},
13748 #ifdef UA_ENABLE_TYPENAMES 13749 .typeName =
"ModifyMonitoredItemsRequest",
13753 .fixedSize =
false,
13754 .overlayable =
false,
13755 .binaryEncodingId = 763,
13757 .members = ModifyMonitoredItemsRequest_members },
13760 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 770},
13762 #ifdef UA_ENABLE_TYPENAMES 13763 .typeName =
"SetMonitoringModeResponse",
13767 .fixedSize =
false,
13768 .overlayable =
false,
13769 .binaryEncodingId = 772,
13771 .members = SetMonitoringModeResponse_members },
13774 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 420},
13776 #ifdef UA_ENABLE_TYPENAMES 13777 .typeName =
"FindServersRequest",
13781 .fixedSize =
false,
13782 .overlayable =
false,
13783 .binaryEncodingId = 422,
13785 .members = FindServersRequest_members },
13788 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 518},
13790 #ifdef UA_ENABLE_TYPENAMES 13791 .typeName =
"ReferenceDescription",
13795 .fixedSize =
false,
13796 .overlayable =
false,
13797 .binaryEncodingId = 520,
13799 .members = ReferenceDescription_members },
13802 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 800},
13804 #ifdef UA_ENABLE_TYPENAMES 13805 .typeName =
"SetPublishingModeResponse",
13809 .fixedSize =
false,
13810 .overlayable =
false,
13811 .binaryEncodingId = 802,
13813 .members = SetPublishingModeResponse_members },
13816 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 607},
13818 #ifdef UA_ENABLE_TYPENAMES 13819 .typeName =
"ContentFilterResult",
13823 .fixedSize =
false,
13824 .overlayable =
false,
13825 .binaryEncodingId = 609,
13827 .members = ContentFilterResult_members },
13830 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 379},
13832 #ifdef UA_ENABLE_TYPENAMES 13833 .typeName =
"AddReferencesItem",
13837 .fixedSize =
false,
13838 .overlayable =
false,
13839 .binaryEncodingId = 381,
13841 .members = AddReferencesItem_members },
13844 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 788},
13846 #ifdef UA_ENABLE_TYPENAMES 13847 .typeName =
"CreateSubscriptionResponse",
13851 .fixedSize =
false,
13852 .overlayable =
false,
13853 .binaryEncodingId = 790,
13855 .members = CreateSubscriptionResponse_members },
13858 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 848},
13860 #ifdef UA_ENABLE_TYPENAMES 13861 .typeName =
"DeleteSubscriptionsResponse",
13865 .fixedSize =
false,
13866 .overlayable =
false,
13867 .binaryEncodingId = 850,
13869 .members = DeleteSubscriptionsResponse_members },
13872 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 540},
13874 #ifdef UA_ENABLE_TYPENAMES 13875 .typeName =
"RelativePath",
13879 .fixedSize =
false,
13880 .overlayable =
false,
13881 .binaryEncodingId = 542,
13883 .members = RelativePath_members },
13886 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 507},
13888 #ifdef UA_ENABLE_TYPENAMES 13889 .typeName =
"DeleteReferencesResponse",
13893 .fixedSize =
false,
13894 .overlayable =
false,
13895 .binaryEncodingId = 509,
13897 .members = DeleteReferencesResponse_members },
13900 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 752},
13902 #ifdef UA_ENABLE_TYPENAMES 13903 .typeName =
"CreateMonitoredItemsResponse",
13907 .fixedSize =
false,
13908 .overlayable =
false,
13909 .binaryEncodingId = 754,
13911 .members = CreateMonitoredItemsResponse_members },
13914 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 713},
13916 #ifdef UA_ENABLE_TYPENAMES 13917 .typeName =
"CallResponse",
13921 .fixedSize =
false,
13922 .overlayable =
false,
13923 .binaryEncodingId = 715,
13925 .members = CallResponse_members },
13928 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 501},
13930 #ifdef UA_ENABLE_TYPENAMES 13931 .typeName =
"DeleteNodesResponse",
13935 .fixedSize =
false,
13936 .overlayable =
false,
13937 .binaryEncodingId = 503,
13939 .members = DeleteNodesResponse_members },
13942 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 833},
13944 #ifdef UA_ENABLE_TYPENAMES 13945 .typeName =
"RepublishResponse",
13949 .fixedSize =
false,
13950 .overlayable =
false,
13951 .binaryEncodingId = 835,
13953 .members = RepublishResponse_members },
13956 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 743},
13958 #ifdef UA_ENABLE_TYPENAMES 13959 .typeName =
"MonitoredItemCreateRequest",
13963 .fixedSize =
false,
13964 .overlayable =
false,
13965 .binaryEncodingId = 745,
13967 .members = MonitoredItemCreateRequest_members },
13970 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 504},
13972 #ifdef UA_ENABLE_TYPENAMES 13973 .typeName =
"DeleteReferencesRequest",
13977 .fixedSize =
false,
13978 .overlayable =
false,
13979 .binaryEncodingId = 506,
13981 .members = DeleteReferencesRequest_members },
13984 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 764},
13986 #ifdef UA_ENABLE_TYPENAMES 13987 .typeName =
"ModifyMonitoredItemsResponse",
13991 .fixedSize =
false,
13992 .overlayable =
false,
13993 .binaryEncodingId = 766,
13995 .members = ModifyMonitoredItemsResponse_members },
13998 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 632},
14000 #ifdef UA_ENABLE_TYPENAMES 14001 .typeName =
"ReadResponse",
14005 .fixedSize =
false,
14006 .overlayable =
false,
14007 .binaryEncodingId = 634,
14009 .members = ReadResponse_members },
14012 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 492},
14014 #ifdef UA_ENABLE_TYPENAMES 14015 .typeName =
"AddReferencesRequest",
14019 .fixedSize =
false,
14020 .overlayable =
false,
14021 .binaryEncodingId = 494,
14023 .members = AddReferencesRequest_members },
14026 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 629},
14028 #ifdef UA_ENABLE_TYPENAMES 14029 .typeName =
"ReadRequest",
14033 .fixedSize =
false,
14034 .overlayable =
false,
14035 .binaryEncodingId = 631,
14037 .members = ReadRequest_members },
14040 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 376},
14042 #ifdef UA_ENABLE_TYPENAMES 14043 .typeName =
"AddNodesItem",
14047 .fixedSize =
false,
14048 .overlayable =
false,
14049 .binaryEncodingId = 378,
14051 .members = AddNodesItem_members },
14054 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 862},
14056 #ifdef UA_ENABLE_TYPENAMES 14057 .typeName =
"ServerStatusDataType",
14061 .fixedSize =
false,
14062 .overlayable =
false,
14063 .binaryEncodingId = 864,
14065 .members = ServerStatusDataType_members },
14068 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 495},
14070 #ifdef UA_ENABLE_TYPENAMES 14071 .typeName =
"AddReferencesResponse",
14075 .fixedSize =
false,
14076 .overlayable =
false,
14077 .binaryEncodingId = 497,
14079 .members = AddReferencesResponse_members },
14082 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 555},
14084 #ifdef UA_ENABLE_TYPENAMES 14085 .typeName =
"TranslateBrowsePathsToNodeIdsResponse",
14089 .fixedSize =
false,
14090 .overlayable =
false,
14091 .binaryEncodingId = 557,
14093 .members = TranslateBrowsePathsToNodeIdsResponse_members },
14096 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 722},
14098 #ifdef UA_ENABLE_TYPENAMES 14099 .typeName =
"DataChangeFilter",
14105 .binaryEncodingId = 724,
14107 .members = DataChangeFilter_members },
14110 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 583},
14112 #ifdef UA_ENABLE_TYPENAMES 14113 .typeName =
"ContentFilterElement",
14117 .fixedSize =
false,
14118 .overlayable =
false,
14119 .binaryEncodingId = 585,
14121 .members = ContentFilterElement_members },
14124 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 474},
14126 #ifdef UA_ENABLE_TYPENAMES 14127 .typeName =
"CloseSessionResponse",
14131 .fixedSize =
false,
14132 .overlayable =
false,
14133 .binaryEncodingId = 476,
14135 .members = CloseSessionResponse_members },
14138 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 308},
14140 #ifdef UA_ENABLE_TYPENAMES 14141 .typeName =
"ApplicationDescription",
14145 .fixedSize =
false,
14146 .overlayable =
false,
14147 .binaryEncodingId = 310,
14149 .members = ApplicationDescription_members },
14152 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 395},
14154 #ifdef UA_ENABLE_TYPENAMES 14155 .typeName =
"ServiceFault",
14159 .fixedSize =
false,
14160 .overlayable =
false,
14161 .binaryEncodingId = 397,
14163 .members = ServiceFault_members },
14166 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 423},
14168 #ifdef UA_ENABLE_TYPENAMES 14169 .typeName =
"FindServersResponse",
14173 .fixedSize =
false,
14174 .overlayable =
false,
14175 .binaryEncodingId = 425,
14177 .members = FindServersResponse_members },
14180 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 749},
14182 #ifdef UA_ENABLE_TYPENAMES 14183 .typeName =
"CreateMonitoredItemsRequest",
14187 .fixedSize =
false,
14188 .overlayable =
false,
14189 .binaryEncodingId = 751,
14191 .members = CreateMonitoredItemsRequest_members },
14194 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 586},
14196 #ifdef UA_ENABLE_TYPENAMES 14197 .typeName =
"ContentFilter",
14201 .fixedSize =
false,
14202 .overlayable =
false,
14203 .binaryEncodingId = 588,
14205 .members = ContentFilter_members },
14208 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 616},
14210 #ifdef UA_ENABLE_TYPENAMES 14211 .typeName =
"QueryFirstResponse",
14215 .fixedSize =
false,
14216 .overlayable =
false,
14217 .binaryEncodingId = 618,
14219 .members = QueryFirstResponse_members },
14222 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 486},
14224 #ifdef UA_ENABLE_TYPENAMES 14225 .typeName =
"AddNodesRequest",
14229 .fixedSize =
false,
14230 .overlayable =
false,
14231 .binaryEncodingId = 488,
14233 .members = AddNodesRequest_members },
14236 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 525},
14238 #ifdef UA_ENABLE_TYPENAMES 14239 .typeName =
"BrowseRequest",
14243 .fixedSize =
false,
14244 .overlayable =
false,
14245 .binaryEncodingId = 527,
14247 .members = BrowseRequest_members },
14250 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 543},
14252 #ifdef UA_ENABLE_TYPENAMES 14253 .typeName =
"BrowsePath",
14257 .fixedSize =
false,
14258 .overlayable =
false,
14259 .binaryEncodingId = 545,
14261 .members = BrowsePath_members },
14264 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 522},
14266 #ifdef UA_ENABLE_TYPENAMES 14267 .typeName =
"BrowseResult",
14271 .fixedSize =
false,
14272 .overlayable =
false,
14273 .binaryEncodingId = 524,
14275 .members = BrowseResult_members },
14278 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 459},
14280 #ifdef UA_ENABLE_TYPENAMES 14281 .typeName =
"CreateSessionRequest",
14285 .fixedSize =
false,
14286 .overlayable =
false,
14287 .binaryEncodingId = 461,
14289 .members = CreateSessionRequest_members },
14292 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 570},
14294 #ifdef UA_ENABLE_TYPENAMES 14295 .typeName =
"QueryDataDescription",
14299 .fixedSize =
false,
14300 .overlayable =
false,
14301 .binaryEncodingId = 572,
14303 .members = QueryDataDescription_members },
14306 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 312},
14308 #ifdef UA_ENABLE_TYPENAMES 14309 .typeName =
"EndpointDescription",
14313 .fixedSize =
false,
14314 .overlayable =
false,
14315 .binaryEncodingId = 314,
14317 .members = EndpointDescription_members },
14320 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 429},
14322 #ifdef UA_ENABLE_TYPENAMES 14323 .typeName =
"GetEndpointsResponse",
14327 .fixedSize =
false,
14328 .overlayable =
false,
14329 .binaryEncodingId = 431,
14331 .members = GetEndpointsResponse_members },
14334 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 573},
14336 #ifdef UA_ENABLE_TYPENAMES 14337 .typeName =
"NodeTypeDescription",
14341 .fixedSize =
false,
14342 .overlayable =
false,
14343 .binaryEncodingId = 575,
14345 .members = NodeTypeDescription_members },
14348 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 534},
14350 #ifdef UA_ENABLE_TYPENAMES 14351 .typeName =
"BrowseNextResponse",
14355 .fixedSize =
false,
14356 .overlayable =
false,
14357 .binaryEncodingId = 536,
14359 .members = BrowseNextResponse_members },
14362 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 552},
14364 #ifdef UA_ENABLE_TYPENAMES 14365 .typeName =
"TranslateBrowsePathsToNodeIdsRequest",
14369 .fixedSize =
false,
14370 .overlayable =
false,
14371 .binaryEncodingId = 554,
14373 .members = TranslateBrowsePathsToNodeIdsRequest_members },
14376 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 528},
14378 #ifdef UA_ENABLE_TYPENAMES 14379 .typeName =
"BrowseResponse",
14383 .fixedSize =
false,
14384 .overlayable =
false,
14385 .binaryEncodingId = 530,
14387 .members = BrowseResponse_members },
14390 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 462},
14392 #ifdef UA_ENABLE_TYPENAMES 14393 .typeName =
"CreateSessionResponse",
14397 .fixedSize =
false,
14398 .overlayable =
false,
14399 .binaryEncodingId = 464,
14401 .members = CreateSessionResponse_members },
14404 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 613},
14406 #ifdef UA_ENABLE_TYPENAMES 14407 .typeName =
"QueryFirstRequest",
14411 .fixedSize =
false,
14412 .overlayable =
false,
14413 .binaryEncodingId = 615,
14415 .members = QueryFirstRequest_members },
14428 #ifdef UA_ENABLE_TYPENAMES 14429 .memberName =
"error",
14431 .namespaceZero =
true,
14436 #ifdef UA_ENABLE_TYPENAMES 14437 .memberName =
"reason",
14439 .namespaceZero =
true,
14447 #ifdef UA_ENABLE_TYPENAMES 14448 .memberName =
"padding",
14450 .namespaceZero =
true,
14455 #ifdef UA_ENABLE_TYPENAMES 14456 .memberName =
"signature",
14458 .namespaceZero =
true,
14466 #ifdef UA_ENABLE_TYPENAMES 14467 .memberName =
"protocolVersion",
14469 .namespaceZero =
true,
14474 #ifdef UA_ENABLE_TYPENAMES 14475 .memberName =
"receiveBufferSize",
14477 .namespaceZero =
true,
14482 #ifdef UA_ENABLE_TYPENAMES 14483 .memberName =
"sendBufferSize",
14485 .namespaceZero =
true,
14490 #ifdef UA_ENABLE_TYPENAMES 14491 .memberName =
"maxMessageSize",
14493 .namespaceZero =
true,
14498 #ifdef UA_ENABLE_TYPENAMES 14499 .memberName =
"maxChunkCount",
14501 .namespaceZero =
true,
14506 #ifdef UA_ENABLE_TYPENAMES 14507 .memberName =
"endpointUrl",
14509 .namespaceZero =
true,
14517 #ifdef UA_ENABLE_TYPENAMES 14518 .memberName =
"error",
14520 .namespaceZero =
true,
14525 #ifdef UA_ENABLE_TYPENAMES 14526 .memberName =
"reason",
14528 .namespaceZero =
true,
14536 #ifdef UA_ENABLE_TYPENAMES 14539 .namespaceZero =
true,
14547 #ifdef UA_ENABLE_TYPENAMES 14548 .memberName =
"securityPolicyUri",
14550 .namespaceZero =
true,
14555 #ifdef UA_ENABLE_TYPENAMES 14556 .memberName =
"senderCertificate",
14558 .namespaceZero =
true,
14563 #ifdef UA_ENABLE_TYPENAMES 14564 .memberName =
"receiverCertificateThumbprint",
14566 .namespaceZero =
true,
14574 #ifdef UA_ENABLE_TYPENAMES 14575 .memberName =
"protocolVersion",
14577 .namespaceZero =
true,
14582 #ifdef UA_ENABLE_TYPENAMES 14583 .memberName =
"receiveBufferSize",
14585 .namespaceZero =
true,
14590 #ifdef UA_ENABLE_TYPENAMES 14591 .memberName =
"sendBufferSize",
14593 .namespaceZero =
true,
14598 #ifdef UA_ENABLE_TYPENAMES 14599 .memberName =
"maxMessageSize",
14601 .namespaceZero =
true,
14606 #ifdef UA_ENABLE_TYPENAMES 14607 .memberName =
"maxChunkCount",
14609 .namespaceZero =
true,
14617 #ifdef UA_ENABLE_TYPENAMES 14618 .memberName =
"sequenceNumber",
14620 .namespaceZero =
true,
14625 #ifdef UA_ENABLE_TYPENAMES 14626 .memberName =
"requestId",
14628 .namespaceZero =
true,
14636 #ifdef UA_ENABLE_TYPENAMES 14637 .memberName =
"messageTypeAndChunkType",
14639 .namespaceZero =
true,
14644 #ifdef UA_ENABLE_TYPENAMES 14645 .memberName =
"messageSize",
14647 .namespaceZero =
true,
14655 #ifdef UA_ENABLE_TYPENAMES 14658 .namespaceZero =
true,
14666 #ifdef UA_ENABLE_TYPENAMES 14667 .memberName =
"tokenId",
14669 .namespaceZero =
true,
14677 #ifdef UA_ENABLE_TYPENAMES 14678 .memberName =
"messageHeader",
14680 .namespaceZero =
false,
14685 #ifdef UA_ENABLE_TYPENAMES 14686 .memberName =
"secureChannelId",
14688 .namespaceZero =
true,
14697 #ifdef UA_ENABLE_TYPENAMES 14698 .typeName =
"SecureConversationMessageAbortBody",
14702 .fixedSize =
false,
14703 .overlayable =
false,
14704 .binaryEncodingId = 0,
14706 .members = SecureConversationMessageAbortBody_members },
14709 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14711 #ifdef UA_ENABLE_TYPENAMES 14712 .typeName =
"SecureConversationMessageFooter",
14716 .fixedSize =
false,
14717 .overlayable =
false,
14718 .binaryEncodingId = 0,
14720 .members = SecureConversationMessageFooter_members },
14723 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14725 #ifdef UA_ENABLE_TYPENAMES 14726 .typeName =
"TcpHelloMessage",
14730 .fixedSize =
false,
14731 .overlayable =
false,
14732 .binaryEncodingId = 0,
14734 .members = TcpHelloMessage_members },
14737 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14739 #ifdef UA_ENABLE_TYPENAMES 14740 .typeName =
"TcpErrorMessage",
14744 .fixedSize =
false,
14745 .overlayable =
false,
14746 .binaryEncodingId = 0,
14748 .members = TcpErrorMessage_members },
14751 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14753 #ifdef UA_ENABLE_TYPENAMES 14754 .typeName =
"MessageType",
14760 .binaryEncodingId = 0,
14762 .members = MessageType_members },
14765 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14767 #ifdef UA_ENABLE_TYPENAMES 14768 .typeName =
"AsymmetricAlgorithmSecurityHeader",
14772 .fixedSize =
false,
14773 .overlayable =
false,
14774 .binaryEncodingId = 0,
14776 .members = AsymmetricAlgorithmSecurityHeader_members },
14779 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14781 #ifdef UA_ENABLE_TYPENAMES 14782 .typeName =
"TcpAcknowledgeMessage",
14788 .binaryEncodingId = 0,
14790 .members = TcpAcknowledgeMessage_members },
14793 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14795 #ifdef UA_ENABLE_TYPENAMES 14796 .typeName =
"SequenceHeader",
14802 .binaryEncodingId = 0,
14804 .members = SequenceHeader_members },
14807 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14809 #ifdef UA_ENABLE_TYPENAMES 14810 .typeName =
"TcpMessageHeader",
14816 .binaryEncodingId = 0,
14818 .members = TcpMessageHeader_members },
14821 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14823 #ifdef UA_ENABLE_TYPENAMES 14824 .typeName =
"ChunkType",
14830 .binaryEncodingId = 0,
14832 .members = ChunkType_members },
14835 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14837 #ifdef UA_ENABLE_TYPENAMES 14838 .typeName =
"SymmetricAlgorithmSecurityHeader",
14844 .binaryEncodingId = 0,
14846 .members = SymmetricAlgorithmSecurityHeader_members },
14849 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14851 #ifdef UA_ENABLE_TYPENAMES 14852 .typeName =
"SecureConversationMessageHeader",
14858 .binaryEncodingId = 0,
14860 .members = SecureConversationMessageHeader_members },
14891 message->
data = data;
14892 message->
length = length;
14898 size_t complete_until = 0;
14900 while(message->
length - complete_until >= 8) {
14905 if(msgtype != (
'M' + (
'S' << 8) + (
'G' << 16)) &&
14906 msgtype != (
'E' + (
'R' << 8) + (
'R' << 16)) &&
14907 msgtype != (
'O' + (
'P' << 8) + (
'N' << 16)) &&
14908 msgtype != (
'H' + (
'E' << 8) + (
'L' << 16)) &&
14909 msgtype != (
'A' + (
'C' << 8) + (
'K' << 16)) &&
14910 msgtype != (
'C' + (
'L' << 8) + (
'O' << 16))) {
14911 garbage_end =
true;
14917 size_t length_pos = complete_until + 4;
14918 UA_StatusCode decode_retval = UA_UInt32_decodeBinary(message, &length_pos, &chunk_length);
14922 chunk_length < 16 ||
14924 garbage_end =
true;
14929 if(chunk_length + complete_until > message->
length)
14932 complete_until += chunk_length;
14936 if(complete_until != message->
length) {
14939 if(complete_until == 0)
14941 message->
length = complete_until;
14946 if(complete_until == 0) {
14962 size_t incomplete_length = message->
length - complete_until;
14967 &message->
data[complete_until], incomplete_length);
14968 message->
length = complete_until;
14985 *realloced =
false;
14990 retval = connection->
recv(connection, chunks, timeout);
15012 UA_atomic_cmpxchg((
void**)&channel->
connection, connection,
NULL);
15013 UA_atomic_xchg((
void**)&connection->
channel,
NULL);
15021 UA_atomic_xchg((
void**)&connection->
channel, (
void*)channel);
15026 const char ** port,
const char **path) {
15027 if (!endpointUrl || !hostname)
15030 size_t urlLength = strlen(endpointUrl);
15031 if(urlLength < 10 || urlLength >= 256)
15034 if(strncmp(endpointUrl,
"opc.tcp://", 10) != 0)
15037 if (urlLength == 10) {
15038 hostname[0] =
'\0';
15044 size_t portpos = 10;
15047 UA_Boolean ip6_end_found = endpointUrl[portpos] !=
'[';
15048 for(; portpos < urlLength; ++portpos) {
15049 if (!ip6_end_found) {
15050 if (endpointUrl[portpos] ==
']')
15055 if(endpointUrl[portpos] ==
':' || endpointUrl[portpos] ==
'/')
15059 memcpy(hostname, &endpointUrl[10], portpos - 10);
15060 hostname[portpos-10] = 0;
15063 if (portpos < urlLength - 1) {
15064 if (endpointUrl[portpos] ==
'/')
15067 *port = &endpointUrl[portpos + 1];
15074 size_t pathpos = portpos < urlLength ? portpos : 10;
15075 for(; pathpos < urlLength; ++pathpos) {
15076 if(endpointUrl[pathpos] ==
'/')
15079 if (pathpos < urlLength-1)
15080 *path = &endpointUrl[pathpos+1];
15091 UA_UInt16 * port,
const char ** path) {
15092 const char* portTmp =
NULL;
15093 const char* pathTmp =
NULL;
15097 hostname[0] =
'\0';
15108 portLen = (size_t)(pathTmp-portTmp-1);
15110 portLen = strlen(portTmp);
15115 memcpy(portStr, portTmp, portLen);
15116 portStr[portLen]=
'\0';
15119 for (
size_t i=0; i<6; ++i) {
15120 if (portStr[i] == 0)
15122 if (portStr[i] <
'0' || portStr[i] >
'9')
15145 size_t progress = 0;
15147 while(progress < buflen) {
15149 if(
'0' > c ||
'9' < c)
15165 #define UA_SECURE_MESSAGE_HEADER_LENGTH 24 15177 UA_ByteString_deleteMembers(&channel->
serverNonce);
15179 UA_ByteString_deleteMembers(&channel->
clientNonce);
15180 UA_ChannelSecurityToken_deleteMembers(&channel->
securityToken);
15191 se->session->channel =
NULL;
15199 UA_ByteString_deleteMembers(&ch->bytes);
15210 nonce->
data[0] =
'a';
15214 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15215 #pragma GCC diagnostic push 15216 #pragma GCC diagnostic ignored "-Wextra" 15217 #pragma GCC diagnostic ignored "-Wcast-qual" 15218 #pragma GCC diagnostic ignored "-Wunused-value" 15225 se->session = session;
15226 if(UA_atomic_cmpxchg((
void**)&session->
channel,
NULL, channel) !=
NULL) {
15233 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15234 #pragma GCC diagnostic pop 15242 if(se->session == session)
15259 return se->session;
15309 UA_String_init(&errorMsg);
15311 UA_UInt32_encodeBinary(&ci->
errorCode, dst, &offset);
15312 UA_String_encodeBinary(&errorMsg, dst, &offset);
15323 size_t offset_header = 0;
15324 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, dst, &offset_header);
15325 UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symSecHeader, dst, &offset_header);
15326 UA_SequenceHeader_encodeBinary(&seqHeader, dst, &offset_header);
15349 const void *content,
const UA_DataType *contentType) {
15369 size_t messagePos = 0;
15372 UA_NodeId_encodeBinary(&typeId, &message, &messagePos);
15389 &ci, &message, &messagePos);
15396 UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15403 return UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15414 if(ch->requestId == requestId) {
15415 UA_ByteString_deleteMembers(&ch->bytes);
15426 size_t offset,
size_t chunklength) {
15427 UA_Byte* new_bytes =
UA_realloc(ch->bytes.data, ch->bytes.length + chunklength);
15429 UA_ByteString_deleteMembers(&ch->bytes);
15432 ch->bytes.data = new_bytes;
15433 memcpy(&ch->bytes.data[ch->bytes.length], &msg->
data[offset], chunklength);
15434 ch->bytes.length += chunklength;
15440 size_t chunklength) {
15442 if(msg->
length - offset < chunklength) {
15444 UA_SecureChannel_removeChunk(channel, requestId);
15451 if(ch->requestId == requestId)
15460 ch->requestId = requestId;
15461 UA_ByteString_init(&ch->bytes);
15465 appendChunk(ch, msg, offset, chunklength);
15471 size_t chunklength,
UA_Boolean *deleteChunk) {
15472 if(msg->
length - offset < chunklength) {
15474 UA_SecureChannel_removeChunk(channel, requestId);
15480 if(ch->requestId == requestId)
15486 *deleteChunk =
false;
15487 bytes.
length = chunklength;
15490 *deleteChunk =
true;
15491 appendChunk(ch, msg, offset, chunklength);
15519 if (chunks->
length > 3 && chunks->
data[offset] ==
'E' &&
15520 chunks->
data[offset+1] ==
'R' && chunks->
data[offset+2] ==
'R') {
15522 retval = UA_TcpMessageHeader_decodeBinary(chunks, &offset, &header);
15527 retval = UA_TcpErrorMessage_decodeBinary(chunks, &offset, &errorMessage);
15536 size_t initial_offset = offset;
15540 retval = UA_SecureConversationMessageHeader_decodeBinary(chunks, &offset, &header);
15553 UA_SequenceHeader_init(&sequenceHeader);
15558 retval |= UA_UInt32_decodeBinary(chunks, &offset, &tokenId);
15559 retval |= UA_SequenceHeader_decodeBinary(chunks, &offset, &sequenceHeader);
15571 retval = UA_SecureChannel_processSequenceNumber(channel, sequenceHeader.
sequenceNumber);
15577 size_t processed_header = offset - initial_offset;
15580 UA_SecureChannel_appendChunk(channel, sequenceHeader.
requestId, chunks, offset,
15586 UA_SecureChannel_finalizeChunk(channel, sequenceHeader.
requestId, chunks, offset,
15589 if(message.
length > 0) {
15593 UA_ByteString_deleteMembers(&message);
15597 UA_SecureChannel_removeChunk(channel, sequenceHeader.
requestId);
15605 }
while(chunks->
length > offset);
15616 #ifdef UA_ENABLE_SUBSCRIPTIONS 15619 UA_Session adminSession = {
15621 .applicationName = {.locale = {0,
NULL}, .text = {0,
NULL}},
15623 .gatewayServerUri = {0,
NULL}, .discoveryProfileUri = {0,
NULL},
15624 .discoveryUrlsSize = 0, .discoveryUrls =
NULL},
15625 .sessionName = {
sizeof(
"Administrator Session")-1, (
UA_Byte*)
"Administrator Session"},
15627 .identifier.numeric = 1},
15628 .sessionId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 1},
15631 .continuationPoints = {
NULL}};
15645 LIST_INIT(&session->continuationPoints);
15646 #ifdef UA_ENABLE_SUBSCRIPTIONS 15647 LIST_INIT(&session->serverSubscriptions);
15648 session->lastSubscriptionID = 0;
15656 UA_NodeId_deleteMembers(&session->
sessionId);
15661 UA_ByteString_deleteMembers(&cp->identifier);
15662 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
15667 #ifdef UA_ENABLE_SUBSCRIPTIONS 15674 UA_PublishResponseEntry *entry;
15677 UA_PublishResponse_deleteMembers(&entry->response);
15688 #ifdef UA_ENABLE_SUBSCRIPTIONS 15690 void UA_Session_addSubscription(UA_Session *session,
UA_Subscription *newSubscription) {
15691 LIST_INSERT_HEAD(&session->serverSubscriptions, newSubscription, listEntry);
15695 UA_Session_deleteSubscription(UA_Server *server, UA_Session *session,
15697 UA_Subscription *sub = UA_Session_getSubscriptionByID(session, subscriptionID);
15707 UA_Session_getSubscriptionByID(UA_Session *session,
UA_UInt32 subscriptionID) {
15709 LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
15710 if(sub->subscriptionID == subscriptionID)
15716 UA_UInt32 UA_Session_getUniqueSubscriptionID(UA_Session *session) {
15717 return ++(session->lastSubscriptionID);
15729 #ifdef UA_ENABLE_GENERATE_NAMESPACE0 15732 #ifdef UA_ENABLE_SUBSCRIPTIONS 15735 #if defined(UA_ENABLE_MULTITHREADING) && !defined(NDEBUG) 15739 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 15743 static const UA_NodeId nodeIdHasSubType = {
15746 static const UA_NodeId nodeIdHasComponent = {
15749 static const UA_NodeId nodeIdHasProperty = {
15752 static const UA_NodeId nodeIdOrganizes = {
15756 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 15757 static const UA_NodeId nodeIdNonHierarchicalReferences = {
15789 .data = (
UA_Byte*)(uintptr_t)name};
15809 size_t refssize = parent->referencesSize;
15817 for(
size_t i = parent->referencesSize; i > 0; --i) {
15829 addNodeInternal(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15832 UA_AddNodesResult_init(&res);
15835 &referenceTypeId, &UA_NODEID_NULL,
15842 addNodeInternalWithType(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15845 UA_AddNodesResult_init(&res);
15848 &referenceTypeId, &typeIdentifier,
15856 deleteInstanceChildren(UA_Server *server,
UA_NodeId *objectNodeId) {
15859 UA_BrowseDescription_init(&bDes);
15860 bDes.
nodeId = *objectNodeId;
15873 true, rd->
nodeId,
true);
15877 UA_BrowseResult_deleteMembers(&bRes);
15899 #ifdef UA_ENABLE_MULTITHREADING 15900 pthread_cond_destroy(&server->dispatchQueue_condition);
15901 pthread_mutex_destroy(&server->dispatchQueue_mutex);
15907 static void UA_Server_cleanup(UA_Server *server,
void *_) {
15922 UA_Server *server = (UA_Server*)handle;
15928 UA_BuildInfo_copy(&server->config.buildInfo, &retval->
buildInfo);
15936 if(sourceTimeStamp) {
15955 UA_Byte *byte = UA_Byte_new();
15961 if(sourceTimeStamp) {
15986 if(sourceTimeStamp) {
16001 UA_Server *server = (UA_Server*)handle;
16008 if(sourceTimestamp) {
16018 UA_Server *server = (UA_Server*)handle;
16036 if(newNamespacesSize <= server->namespacesSize)
16046 for(
size_t i = server->
namespacesSize; i < newNamespacesSize; ++i)
16065 if(sourceTimeStamp) {
16072 static void copyNames(UA_Node *node,
char *name) {
16073 node->browseName = UA_QUALIFIEDNAME_ALLOC(0, name);
16074 node->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16075 node->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16079 addDataTypeNode(UA_Server *server,
char* name,
UA_UInt32 datatypeid,
16082 copyNames((UA_Node*)datatype, name);
16083 datatype->nodeId.identifier.numeric = datatypeid;
16084 datatype->isAbstract = isAbstract;
16085 addNodeInternal(server, (UA_Node*)datatype,
16086 UA_NODEID_NUMERIC(0, parent), nodeIdHasSubType);
16090 addObjectTypeNode(UA_Server *server,
char* name,
UA_UInt32 objecttypeid,
16093 copyNames((UA_Node*)objecttype, name);
16094 objecttype->nodeId.identifier.numeric = objecttypeid;
16095 addNodeInternal(server, (UA_Node*)objecttype, UA_NODEID_NUMERIC(0, parent),
16096 UA_NODEID_NUMERIC(0, parentreference));
16100 createVariableTypeNode(UA_Server *server,
char* name,
UA_UInt32 variabletypeid,
16103 copyNames((UA_Node*)variabletype, name);
16104 variabletype->nodeId.identifier.numeric = variabletypeid;
16105 variabletype->isAbstract =
abstract;
16106 return variabletype;
16109 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16111 GetMonitoredItems(
void *handle,
const UA_NodeId objectId,
size_t inputSize,
16114 UA_Session* session = methodCallSession;
16115 UA_Subscription* subscription = UA_Session_getSubscriptionByID(session, subscriptionId);
16121 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16124 if(sizeOfOutput==0)
16130 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16131 clientHandles[i] = monitoredItem->clientHandle;
16132 serverHandles[i] = monitoredItem->itemId;
16135 UA_Variant_setArray(&output[0], clientHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16136 UA_Variant_setArray(&output[1], serverHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16142 UA_Server *server =
UA_calloc(1,
sizeof(UA_Server));
16146 server->config = config;
16150 #ifdef UA_ENABLE_MULTITHREADING 16152 cds_wfcq_init(&server->dispatchQueue_head, &server->dispatchQueue_tail);
16153 cds_lfs_init(&server->mainLoopJobs);
16158 #ifndef UA_ENABLE_DETERMINISTIC_RNG 16165 UA_String_copy(&server->config.applicationDescription.applicationUri, &server->
namespaces[1]);
16172 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
16178 UA_STRING_ALLOC(
"http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary");
16180 size_t policies = 0;
16181 if(server->config.enableAnonymousLogin)
16183 if(server->config.enableUsernamePasswordLogin)
16188 size_t currentIndex = 0;
16189 if(server->config.enableAnonymousLogin) {
16195 if(server->config.enableUsernamePasswordLogin) {
16204 UA_String_copy(&server->config.serverCertificate, &endpoint->
serverCertificate);
16205 UA_ApplicationDescription_copy(&server->config.applicationDescription, &endpoint->
server);
16214 UA_Job cleanup = {.
type = UA_JOBTYPE_METHODCALL,
16220 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 16227 copyNames((UA_Node*)references,
"References");
16229 references->isAbstract =
true;
16230 references->symmetric =
true;
16231 references->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"References");
16234 copyNames((UA_Node*)hassubtype,
"HasSubtype");
16235 hassubtype->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HasSupertype");
16237 hassubtype->isAbstract =
false;
16238 hassubtype->symmetric =
false;
16246 copyNames((UA_Node*)hierarchicalreferences,
"HierarchicalReferences");
16248 hierarchicalreferences->isAbstract =
true;
16249 hierarchicalreferences->symmetric =
false;
16250 addNodeInternal(server, (UA_Node*)hierarchicalreferences,
16254 copyNames((UA_Node*)nonhierarchicalreferences,
"NonHierarchicalReferences");
16256 nonhierarchicalreferences->isAbstract =
true;
16257 nonhierarchicalreferences->symmetric =
false;
16258 addNodeInternal(server, (UA_Node*)nonhierarchicalreferences,
16262 copyNames((UA_Node*)haschild,
"HasChild");
16264 haschild->isAbstract =
false;
16265 haschild->symmetric =
false;
16266 addNodeInternal(server, (UA_Node*)haschild,
16270 copyNames((UA_Node*)organizes,
"Organizes");
16271 organizes->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrganizedBy");
16273 organizes->isAbstract =
false;
16274 organizes->symmetric =
false;
16275 addNodeInternal(server, (UA_Node*)organizes,
16279 copyNames((UA_Node*)haseventsource,
"HasEventSource");
16280 haseventsource->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EventSourceOf");
16282 haseventsource->isAbstract =
false;
16283 haseventsource->symmetric =
false;
16284 addNodeInternal(server, (UA_Node*)haseventsource,
16288 copyNames((UA_Node*)hasmodellingrule,
"HasModellingRule");
16289 hasmodellingrule->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModellingRuleOf");
16291 hasmodellingrule->isAbstract =
false;
16292 hasmodellingrule->symmetric =
false;
16293 addNodeInternal(server, (UA_Node*)hasmodellingrule, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16296 copyNames((UA_Node*)hasencoding,
"HasEncoding");
16297 hasencoding->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EncodingOf");
16299 hasencoding->isAbstract =
false;
16300 hasencoding->symmetric =
false;
16301 addNodeInternal(server, (UA_Node*)hasencoding, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16304 copyNames((UA_Node*)hasdescription,
"HasDescription");
16305 hasdescription->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"DescriptionOf");
16307 hasdescription->isAbstract =
false;
16308 hasdescription->symmetric =
false;
16309 addNodeInternal(server, (UA_Node*)hasdescription, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16312 copyNames((UA_Node*)hastypedefinition,
"HasTypeDefinition");
16313 hastypedefinition->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"TypeDefinitionOf");
16315 hastypedefinition->isAbstract =
false;
16316 hastypedefinition->symmetric =
false;
16317 addNodeInternal(server, (UA_Node*)hastypedefinition, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16320 copyNames((UA_Node*)generatesevent,
"GeneratesEvent");
16321 generatesevent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"GeneratedBy");
16323 generatesevent->isAbstract =
false;
16324 generatesevent->symmetric =
false;
16325 addNodeInternal(server, (UA_Node*)generatesevent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16328 copyNames((UA_Node*)aggregates,
"Aggregates");
16329 aggregates->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"AggregatedBy");
16331 aggregates->isAbstract =
false;
16332 aggregates->symmetric =
false;
16333 addNodeInternal(server, (UA_Node*)aggregates, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCHILD), nodeIdHasSubType);
16340 copyNames((UA_Node*)hasproperty,
"HasProperty");
16341 hasproperty->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"PropertyOf");
16343 hasproperty->isAbstract =
false;
16344 hasproperty->symmetric =
false;
16345 addNodeInternal(server, (UA_Node*)hasproperty,
16349 copyNames((UA_Node*)hascomponent,
"HasComponent");
16350 hascomponent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ComponentOf");
16352 hascomponent->isAbstract =
false;
16353 hascomponent->symmetric =
false;
16354 addNodeInternal(server, (UA_Node*)hascomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16357 copyNames((UA_Node*)hasnotifier,
"HasNotifier");
16358 hasnotifier->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"NotifierOf");
16360 hasnotifier->isAbstract =
false;
16361 hasnotifier->symmetric =
false;
16362 addNodeInternal(server, (UA_Node*)hasnotifier, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASEVENTSOURCE), nodeIdHasSubType);
16365 copyNames((UA_Node*)hasorderedcomponent,
"HasOrderedComponent");
16366 hasorderedcomponent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrderedComponentOf");
16368 hasorderedcomponent->isAbstract =
false;
16369 hasorderedcomponent->symmetric =
false;
16370 addNodeInternal(server, (UA_Node*)hasorderedcomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCOMPONENT), nodeIdHasSubType);
16373 copyNames((UA_Node*)hasmodelparent,
"HasModelParent");
16374 hasmodelparent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModelParentOf");
16376 hasmodelparent->isAbstract =
false;
16377 hasmodelparent->symmetric =
false;
16378 addNodeInternal(server, (UA_Node*)hasmodelparent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16381 copyNames((UA_Node*)fromstate,
"FromState");
16382 fromstate->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ToTransition");
16384 fromstate->isAbstract =
false;
16385 fromstate->symmetric =
false;
16386 addNodeInternal(server, (UA_Node*)fromstate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16389 copyNames((UA_Node*)tostate,
"ToState");
16390 tostate->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"FromTransition");
16392 tostate->isAbstract =
false;
16393 tostate->symmetric =
false;
16394 addNodeInternal(server, (UA_Node*)tostate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16397 copyNames((UA_Node*)hascause,
"HasCause");
16398 hascause->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeCausedBy");
16400 hascause->isAbstract =
false;
16401 hascause->symmetric =
false;
16402 addNodeInternal(server, (UA_Node*)hascause, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16405 copyNames((UA_Node*)haseffect,
"HasEffect");
16406 haseffect->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeEffectedBy");
16408 haseffect->isAbstract =
false;
16409 haseffect->symmetric =
false;
16410 addNodeInternal(server, (UA_Node*)haseffect, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16413 copyNames((UA_Node*)hashistoricalconfiguration,
"HasHistoricalConfiguration");
16414 hashistoricalconfiguration->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HistoricalConfigurationOf");
16416 hashistoricalconfiguration->isAbstract =
false;
16417 hashistoricalconfiguration->symmetric =
false;
16418 addNodeInternal(server, (UA_Node*)hashistoricalconfiguration, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16425 copyNames((UA_Node*)basedatatype,
"BaseDataType");
16427 basedatatype->isAbstract =
true;
16470 basevartype->valueRank = -2;
16478 basedatavartype->valueRank = -2;
16480 addNodeInternalWithType(server, (UA_Node*)basedatavartype,
16486 propertytype->valueRank = -2;
16488 addNodeInternalWithType(server, (UA_Node*)propertytype,
16494 buildinfotype->valueRank = -1;
16496 addNodeInternalWithType(server, (UA_Node*)buildinfotype,
16502 serverstatustype->valueRank = -1;
16504 addNodeInternalWithType(server, (UA_Node*)serverstatustype,
16513 copyNames((UA_Node*)baseobjtype,
"BaseObjectType");
16534 static const UA_NodeId nodeIdFolderType = {
16537 static const UA_NodeId nodeIdHasTypeDefinition = {
16542 copyNames((UA_Node*)root,
"Root");
16551 copyNames((UA_Node*)objects,
"Objects");
16553 addNodeInternalWithType(server, (UA_Node*)objects, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16554 nodeIdOrganizes, nodeIdFolderType);
16557 copyNames((UA_Node*)types,
"Types");
16559 addNodeInternalWithType(server, (UA_Node*)types, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16560 nodeIdOrganizes, nodeIdFolderType);
16563 copyNames((UA_Node*)referencetypes,
"ReferenceTypes");
16565 addNodeInternalWithType(server, (UA_Node*)referencetypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16566 nodeIdOrganizes, nodeIdFolderType);
16571 copyNames((UA_Node*)datatypes,
"DataTypes");
16573 addNodeInternalWithType(server, (UA_Node*)datatypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16574 nodeIdOrganizes, nodeIdFolderType);
16579 copyNames((UA_Node*)variabletypes,
"VariableTypes");
16581 addNodeInternalWithType(server, (UA_Node*)variabletypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16582 nodeIdOrganizes, nodeIdFolderType);
16587 copyNames((UA_Node*)objecttypes,
"ObjectTypes");
16589 addNodeInternalWithType(server, (UA_Node*)objecttypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16590 nodeIdOrganizes, nodeIdFolderType);
16595 copyNames((UA_Node*)eventtypes,
"EventTypes");
16597 addNodeInternalWithType(server, (UA_Node*)eventtypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16598 nodeIdOrganizes, nodeIdFolderType);
16601 copyNames((UA_Node*)views,
"Views");
16603 addNodeInternalWithType(server, (UA_Node*)views, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16604 nodeIdOrganizes, nodeIdFolderType);
16611 copyNames((UA_Node*)mandatory,
"Mandatory");
16613 addNodeInternalWithType(server, (UA_Node*)mandatory, UA_NODEID_NULL,
16617 copyNames((UA_Node*)optional,
"Optional");
16619 addNodeInternalWithType(server, (UA_Node*)optional, UA_NODEID_NULL,
16624 ua_namespaceinit_generated(server);
16633 copyNames((UA_Node*)servernode,
"Server");
16642 deleteInstanceChildren(server, &serverNodeId);
16645 copyNames((UA_Node*)namespaceArray,
"NamespaceArray");
16648 namespaceArray->value.dataSource = (UA_DataSource) {.handle = server, .read = readNamespaces,
16649 .write = writeNamespaces};
16651 namespaceArray->valueRank = 1;
16652 namespaceArray->minimumSamplingInterval = 1.0;
16653 addNodeInternalWithType(server, (UA_Node*)namespaceArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16657 copyNames((UA_Node*)serverArray,
"ServerArray");
16660 &server->config.applicationDescription.applicationUri, 1,
16661 &UA_TYPES[UA_TYPES_STRING]);
16662 serverArray->value.data.value.hasValue =
true;
16663 serverArray->valueRank = 1;
16664 serverArray->minimumSamplingInterval = 1.0;
16665 addNodeInternalWithType(server, (UA_Node*)serverArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16669 copyNames((UA_Node*)servercapablities,
"ServerCapabilities");
16671 addNodeInternalWithType(server, (UA_Node*)servercapablities, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16672 nodeIdHasComponent,
16675 deleteInstanceChildren(server, &ServerCapabilitiesNodeId);
16678 copyNames((UA_Node*)localeIdArray,
"LocaleIdArray");
16682 &enLocale, 1, &UA_TYPES[UA_TYPES_STRING]);
16683 localeIdArray->value.data.value.hasValue =
true;
16684 localeIdArray->valueRank = 1;
16685 localeIdArray->minimumSamplingInterval = 1.0;
16686 addNodeInternalWithType(server, (UA_Node*)localeIdArray,
16690 UA_VariableNode *maxBrowseContinuationPoints = UA_NodeStore_newVariableNode();
16691 copyNames((UA_Node*)maxBrowseContinuationPoints,
"MaxBrowseContinuationPoints");
16692 maxBrowseContinuationPoints->nodeId.identifier.numeric =
16696 maxBrowseContinuationPoints->value.data.value.hasValue =
true;
16697 addNodeInternalWithType(server, (UA_Node*)maxBrowseContinuationPoints,
16702 #define MAX_PROFILEARRAY 16 //a *magic* limit to the number of supported profiles 16703 #define ADDPROFILEARRAY(x) profileArray[profileArraySize++] = UA_STRING_ALLOC(x) 16706 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NanoEmbeddedDevice");
16708 #ifdef UA_ENABLE_SERVICESET_NODEMANAGEMENT 16709 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NodeManagement");
16711 #ifdef UA_ENABLE_SERVICESET_METHOD 16712 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/Methods");
16714 #ifdef UA_ENABLE_SUBSCRIPTIONS 16715 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/EmbeddedDataChangeSubscription");
16718 UA_VariableNode *serverProfileArray = UA_NodeStore_newVariableNode();
16719 copyNames((UA_Node*)serverProfileArray,
"ServerProfileArray");
16722 UA_Array_new(profileArraySize, &UA_TYPES[UA_TYPES_STRING]),
16723 profileArraySize, &UA_TYPES[UA_TYPES_STRING]);
16724 for(
UA_UInt16 i=0;i<profileArraySize;++i)
16725 ((
UA_String *)serverProfileArray->value.data.value.value.data)[i] = profileArray[i];
16726 serverProfileArray->value.data.value.hasValue =
true;
16727 serverProfileArray->valueRank = 1;
16728 serverProfileArray->minimumSamplingInterval = 1.0;
16729 addNodeInternalWithType(server, (UA_Node*)serverProfileArray,
16733 UA_VariableNode *softwareCertificates = UA_NodeStore_newVariableNode();
16734 copyNames((UA_Node*)softwareCertificates,
"SoftwareCertificates");
16737 addNodeInternalWithType(server, (UA_Node*)softwareCertificates,
16741 UA_VariableNode *maxQueryContinuationPoints = UA_NodeStore_newVariableNode();
16742 copyNames((UA_Node*)maxQueryContinuationPoints,
"MaxQueryContinuationPoints");
16745 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16746 maxQueryContinuationPoints->value.data.value.hasValue =
true;
16747 addNodeInternalWithType(server, (UA_Node*)maxQueryContinuationPoints,
16751 UA_VariableNode *maxHistoryContinuationPoints = UA_NodeStore_newVariableNode();
16752 copyNames((UA_Node*)maxHistoryContinuationPoints,
"MaxHistoryContinuationPoints");
16755 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16756 maxHistoryContinuationPoints->value.data.value.hasValue =
true;
16757 addNodeInternalWithType(server, (UA_Node*)maxHistoryContinuationPoints,
16761 UA_VariableNode *minSupportedSampleRate = UA_NodeStore_newVariableNode();
16762 copyNames((UA_Node*)minSupportedSampleRate,
"MinSupportedSampleRate");
16766 minSupportedSampleRate->value.data.value.hasValue =
true;
16767 addNodeInternalWithType(server, (UA_Node*)minSupportedSampleRate,
16772 copyNames((UA_Node*)modellingRules,
"ModellingRules");
16774 addNodeInternalWithType(server, (UA_Node*)modellingRules,
16779 copyNames((UA_Node*)aggregateFunctions,
"AggregateFunctions");
16781 addNodeInternalWithType(server, (UA_Node*)aggregateFunctions,
16786 copyNames((UA_Node*)serverdiagnostics,
"ServerDiagnostics");
16788 addNodeInternalWithType(server, (UA_Node*)serverdiagnostics,
16792 deleteInstanceChildren(server, &ServerDiagnosticsNodeId);
16795 copyNames((UA_Node*)enabledFlag,
"EnabledFlag");
16799 enabledFlag->value.data.value.hasValue =
true;
16800 enabledFlag->valueRank = 1;
16801 enabledFlag->minimumSamplingInterval = 1.0;
16802 addNodeInternalWithType(server, (UA_Node*)enabledFlag,
16807 copyNames((UA_Node*)serverstatus,
"ServerStatus");
16810 serverstatus->value.dataSource = (UA_DataSource) {.handle = server, .read = readStatus,
16812 addNodeInternalWithType(server, (UA_Node*)serverstatus, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16816 copyNames((UA_Node*)starttime,
"StartTime");
16820 starttime->value.data.value.hasValue =
true;
16821 addNodeInternalWithType(server, (UA_Node*)starttime,
16826 copyNames((UA_Node*)currenttime,
"CurrentTime");
16829 currenttime->value.dataSource = (UA_DataSource) {.handle =
NULL, .read = readCurrentTime,
16831 addNodeInternalWithType(server, (UA_Node*)currenttime,
16836 copyNames((UA_Node*)state,
"State");
16840 state->value.data.value.hasValue =
true;
16841 state->minimumSamplingInterval = 500.0f;
16846 copyNames((UA_Node*)buildinfo,
"BuildInfo");
16850 buildinfo->value.data.value.hasValue =
true;
16851 addNodeInternalWithType(server, (UA_Node*)buildinfo,
16856 copyNames((UA_Node*)producturi,
"ProductUri");
16859 &UA_TYPES[UA_TYPES_STRING]);
16860 producturi->value.data.value.hasValue =
true;
16861 addNodeInternalWithType(server, (UA_Node*)producturi,
16866 copyNames((UA_Node*)manufacturername,
"ManufacturerName");
16869 &server->config.buildInfo.manufacturerName,
16870 &UA_TYPES[UA_TYPES_STRING]);
16871 manufacturername->value.data.value.hasValue =
true;
16872 addNodeInternalWithType(server, (UA_Node*)manufacturername,
16877 copyNames((UA_Node*)productname,
"ProductName");
16880 &UA_TYPES[UA_TYPES_STRING]);
16881 productname->value.data.value.hasValue =
true;
16882 addNodeInternalWithType(server, (UA_Node*)productname,
16887 copyNames((UA_Node*)softwareversion,
"SoftwareVersion");
16890 &server->config.buildInfo.softwareVersion, &UA_TYPES[UA_TYPES_STRING]);
16891 softwareversion->value.data.value.hasValue =
true;
16892 addNodeInternalWithType(server, (UA_Node*)softwareversion,
16897 copyNames((UA_Node*)buildnumber,
"BuildNumber");
16900 &UA_TYPES[UA_TYPES_STRING]);
16901 buildnumber->value.data.value.hasValue =
true;
16902 addNodeInternalWithType(server, (UA_Node*)buildnumber,
16907 copyNames((UA_Node*)builddate,
"BuildDate");
16910 &UA_TYPES[UA_TYPES_DATETIME]);
16911 builddate->value.data.value.hasValue =
true;
16912 addNodeInternalWithType(server, (UA_Node*)builddate,
16916 UA_VariableNode *secondstillshutdown = UA_NodeStore_newVariableNode();
16917 copyNames((UA_Node*)secondstillshutdown,
"SecondsTillShutdown");
16921 secondstillshutdown->value.data.value.hasValue =
true;
16922 addNodeInternalWithType(server, (UA_Node*)secondstillshutdown,
16927 copyNames((UA_Node*)shutdownreason,
"ShutdownReason");
16931 shutdownreason->value.data.value.hasValue =
true;
16932 addNodeInternalWithType(server, (UA_Node*)shutdownreason,
16937 copyNames((UA_Node*)servicelevel,
"ServiceLevel");
16940 servicelevel->value.dataSource = (UA_DataSource) {.handle = server, .read = readServiceLevel,
16942 addNodeInternalWithType(server, (UA_Node*)servicelevel,
16947 copyNames((UA_Node*)auditing,
"Auditing");
16950 auditing->value.dataSource = (UA_DataSource) {.handle = server, .read = readAuditing, .write =
NULL};
16951 addNodeInternalWithType(server, (UA_Node*)auditing,
16956 copyNames((UA_Node*)vendorServerInfo,
"VendorServerInfo");
16958 addNodeInternalWithType(server, (UA_Node*)vendorServerInfo,
16968 copyNames((UA_Node*)serverRedundancy,
"ServerRedundancy");
16970 addNodeInternalWithType(server, (UA_Node*)serverRedundancy,
16979 copyNames((UA_Node*)redundancySupport,
"RedundancySupport");
16981 redundancySupport->valueRank = -1;
16986 redundancySupport->value.data.value.hasValue =
true;
16987 addNodeInternalWithType(server, (UA_Node*)redundancySupport,
16991 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16993 UA_Argument_init(&inputArguments);
16995 inputArguments.
name = UA_STRING(
"SubscriptionId");
16999 UA_Argument_init(&outputArguments[0]);
17001 outputArguments[0].
name = UA_STRING(
"ServerHandles");
17004 UA_Argument_init(&outputArguments[1]);
17006 outputArguments[1].
name = UA_STRING(
"ClientHandles");
17010 UA_MethodAttributes_init(&addmethodattributes);
17011 addmethodattributes.
displayName = UA_LOCALIZEDTEXT(
"",
"GetMonitoredItems");
17018 UA_QUALIFIEDNAME(0,
"GetMonitoredItems"), addmethodattributes,
17021 1, &inputArguments, 2, outputArguments,
NULL);
17043 UA_StatusCode retval = UA_RequestHeader_decodeBinary(msg, &offset, &requestHeader);
17047 UA_init(response, responseType);
17053 UA_RequestHeader_deleteMembers(&requestHeader);
17054 UA_ResponseHeader_deleteMembers(responseHeader);
17061 switch(requestTypeId) {
17066 *requiresSession =
false;
17072 *requiresSession =
false;
17078 *requiresSession =
false;
17126 #ifdef UA_ENABLE_SUBSCRIPTIONS 17178 #ifdef UA_ENABLE_METHODCALLS 17186 #ifdef UA_ENABLE_NODEMANAGEMENT 17221 if(UA_TcpHelloMessage_decodeBinary(msg, offset, &helloMessage) !=
UA_STATUSCODE_GOOD) {
17222 connection->
close(connection);
17237 UA_TcpHelloMessage_deleteMembers(&helloMessage);
17253 UA_ByteString_init(&ack_msg);
17261 UA_TcpMessageHeader_encodeBinary(&ackHeader, &ack_msg, &tmpPos);
17262 UA_TcpAcknowledgeMessage_encodeBinary(&ackMessage, &ack_msg, &tmpPos);
17264 connection->
send(connection, &ack_msg);
17276 if(!connection->
channel && channelId != 0)
17288 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(msg, &offset, &asymHeader);
17289 retval |= UA_SequenceHeader_decodeBinary(msg, &offset, &seqHeader);
17290 retval |= UA_NodeId_decodeBinary(msg, &offset, &requestType);
17291 retval |= UA_OpenSecureChannelRequest_decodeBinary(msg, &offset, &r);
17295 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17296 UA_NodeId_deleteMembers(&requestType);
17297 UA_OpenSecureChannelRequest_deleteMembers(&r);
17298 connection->
close(connection);
17304 UA_OpenSecureChannelResponse_init(&p);
17306 UA_OpenSecureChannelRequest_deleteMembers(&r);
17311 UA_OpenSecureChannelResponse_deleteMembers(&p);
17312 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17313 connection->
close(connection);
17322 UA_ByteString_init(&resp_msg);
17325 UA_OpenSecureChannelResponse_deleteMembers(&p);
17326 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17327 connection->
close(connection);
17332 size_t tmpPos = 12;
17334 retval |= UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &resp_msg, &tmpPos);
17335 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &resp_msg, &tmpPos);
17337 retval |= UA_NodeId_encodeBinary(&responseType, &resp_msg, &tmpPos);
17338 retval |= UA_OpenSecureChannelResponse_encodeBinary(&p, &resp_msg, &tmpPos);
17342 UA_OpenSecureChannelResponse_deleteMembers(&p);
17343 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17344 connection->
close(connection);
17354 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, &resp_msg, &tmpPos);
17356 connection->
send(connection, &resp_msg);
17359 UA_OpenSecureChannelResponse_deleteMembers(&p);
17360 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17368 size_t *offset = &ppos;
17372 UA_StatusCode retval = UA_NodeId_decodeBinary(msg, offset, &requestTypeId);
17376 UA_NodeId_deleteMembers(&requestTypeId);
17379 size_t requestPos = *offset;
17387 &responseType, &service, &sessionRequired);
17391 "Client requested a subscription, " \
17392 "but those are not enabled in the build");
17395 "Unknown request with type identifier %i",
17404 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 17406 sessionRequired =
false;
17415 "Could not decode the request");
17416 sendError(channel, msg, requestPos, responseType, requestId, retval);
17422 UA_init(response, responseType);
17423 UA_Session *session =
NULL;
17428 goto send_response;
17440 "Trying to activate a session that is " \
17441 "not known in the server");
17442 sendError(channel, msg, requestPos, responseType,
17448 goto send_response;
17452 UA_Session anonymousSession;
17454 if(sessionRequired) {
17456 "Service request %i without a valid session",
17458 sendError(channel, msg, requestPos, responseType,
17461 if(++channel->invalidSessionAccessCounter > 3)
17466 anonymousSession.
sessionId = UA_NODEID_GUID(0, UA_GUID_NULL);
17467 anonymousSession.
channel = channel;
17468 session = &anonymousSession;
17470 channel->invalidSessionAccessCounter = 0;
17473 if(sessionRequired && !session->
activated) {
17475 "Calling service %i on a non-activated session",
17477 sendError(channel, msg, requestPos, responseType,
17486 if(session->
channel != channel) {
17488 "Client tries to use an obsolete securechannel");
17489 sendError(channel, msg, requestPos, responseType,
17498 #ifdef UA_ENABLE_SUBSCRIPTIONS 17509 service(server, session, request, response);
17519 "Could not send the message over the SecureChannel " 17520 "with StatusCode %s", UA_StatusCode_name(retval));
17530 if (UA_TcpErrorMessage_decodeBinary(msg, offset, &errorMessage) !=
UA_STATUSCODE_GOOD) {
17531 connection->
close(connection);
17536 "Client replied with an error message: %s %.*s",
17544 UA_Server_processSecureChannelMessage(UA_Server *server,
UA_SecureChannel *channel,
17549 switch(messagetype) {
17553 "Client replied with an error message: %s %.*s",
17559 "Cannot process a HEL on an open channel");
17563 "Process an OPN on an open channel");
17569 processMSG(server, channel, requestId, message);
17578 "Unknown message type");
17594 "resulted in error code %s", UA_StatusCode_name(retval));
17599 UA_StatusCode retval = UA_TcpMessageHeader_decodeBinary(message, &offset, &tcpMessageHeader);
17601 connection->
close(connection);
17609 "Connection %i | Process ERR message", connection->
sockfd);
17610 processERR(server, connection, message, &offset);
17614 "Connection %i | Process HEL message", connection->
sockfd);
17615 processHEL(connection, message, &offset);
17619 "Connection %i | Process OPN message", connection->
sockfd);
17621 retval = UA_UInt32_decodeBinary(message, &offset, &channelId);
17623 connection->
close(connection);
17626 processOPN(server, connection, channelId, &offsetMessage);
17630 "Connection %i | Processing a MSG message not possible " 17631 "without a SecureChannel", connection->
sockfd);
17632 connection->
close(connection);
17636 "Connection %i | Processing a CLO message not possible " 17637 "without a SecureChannel", connection->
sockfd);
17638 connection->
close(connection);
17642 "Connection %i | Unknown message type", connection->
sockfd);
17643 connection->
close(connection);
17664 if(buflen <= progress + 1 || buf[progress] !=
':') {
17670 size_t progress2 =
UA_readNumber(&buf[progress], buflen - progress, &dim->
max);
17675 if(dim->
min >= dim->
max)
17678 return progress + progress2;
17684 size_t dimensionsMax = 0;
17690 if(idx >= dimensionsMax) {
17698 dimensions = newds;
17699 dimensionsMax = dimensionsMax + 2;
17703 size_t progress = readDimension(&str->
data[offset], str->
length - offset,
17705 if(progress == 0) {
17709 offset += progress;
17713 if(offset >= str->
length)
17716 if(str->
data[offset] !=
',') {
17738 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize) {
17739 size_t results_size = 20;
17744 UA_StatusCode retval = UA_NodeId_copy(&rootRef->nodeId, &results[0]);
17750 const UA_Node *node = rootRef;
17755 for(
size_t i = 0; i < node->referencesSize; ++i) {
17757 if(node->references[i].isInverse != inverse ||
17758 !
UA_NodeId_equal(&hasSubtypeNodeId, &node->references[i].referenceTypeId))
17763 for(
size_t j = 0; j <= last; ++j) {
17764 if(
UA_NodeId_equal(&node->references[i].targetId.nodeId, &results[j])) {
17773 if(last + 1 >= results_size) {
17780 results = new_results;
17785 retval = UA_NodeId_copy(&node->references[i].targetId.nodeId, &results[++last]);
17796 if(!node || node->nodeClass != rootRef->nodeClass)
17805 *typeHierarchy = results;
17806 *typeHierarchySize = last + 1;
17812 const UA_NodeId *referenceTypeIds,
size_t referenceTypeIdsSize) {
17821 for(
size_t i = 0; i < node->referencesSize; ++i) {
17822 if(!node->references[i].isInverse)
17826 for(
size_t j = 0; j < referenceTypeIdsSize; ++j) {
17827 if(
UA_NodeId_equal(&node->references[i].referenceTypeId, &referenceTypeIds[j]) &&
17828 isNodeInTree(ns, &node->references[i].targetId.nodeId, nodeToFind,
17829 referenceTypeIds, referenceTypeIdsSize))
17857 for(
size_t i = 0; i < node->referencesSize; ++i) {
17858 if(node->references[i].isInverse == inverse &&
17860 parentId = &node->references[i].targetId.nodeId;
17872 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17880 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17890 for(
size_t i = 0; i < node->referencesSize; ++i) {
17891 if(node->references[i].isInverse ==
false &&
17894 if(node->references[i].isInverse ==
true &&
17895 UA_NodeId_equal(&node->references[i].referenceTypeId, &hasTypeDefinition))
17906 const void *data) {
17907 #ifndef UA_ENABLE_MULTITHREADING 17911 UA_Node *editNode = (UA_Node*)(uintptr_t)node;
17912 return callback(server, session, editNode, data);
17919 retval = callback(server, session, copy, data);
17972 #define MAXTIMEOUT 50 // max timeout in millisec until the next main loop iteration 17975 processJob(UA_Server *server,
UA_Job *job) {
17978 switch(job->
type) {
17979 case UA_JOBTYPE_NOTHING:
17981 case UA_JOBTYPE_DETACHCONNECTION:
17984 case UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER:
17990 case UA_JOBTYPE_BINARYMESSAGE_ALLOCATED:
17995 case UA_JOBTYPE_METHODCALL:
17996 case UA_JOBTYPE_METHODCALL_DELAYED:
18001 "Trying to execute a job of unknown type");
18011 #ifdef UA_ENABLE_MULTITHREADING 18013 struct MainLoopJob {
18014 struct cds_lfs_node node;
18018 struct DispatchJob {
18019 struct cds_wfcq_node node;
18024 workerLoop(UA_Worker *worker) {
18025 UA_Server *server = worker->server;
18027 volatile UA_Boolean *running = &worker->running;
18031 rcu_register_thread();
18034 struct DispatchJob *dj = (
struct DispatchJob*)
18035 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18037 processJob(server, &dj->job);
18041 pthread_mutex_lock(&server->dispatchQueue_mutex);
18042 pthread_cond_wait(&server->dispatchQueue_condition, &server->dispatchQueue_mutex);
18043 pthread_mutex_unlock(&server->dispatchQueue_mutex);
18045 UA_atomic_add(counter, 1);
18050 rcu_unregister_thread();
18056 dispatchJob(UA_Server *server,
const UA_Job *job) {
18057 struct DispatchJob *dj =
UA_malloc(
sizeof(
struct DispatchJob));
18059 cds_wfcq_node_init(&dj->node);
18060 cds_wfcq_enqueue(&server->dispatchQueue_head, &server->dispatchQueue_tail, &dj->node);
18064 emptyDispatchQueue(UA_Server *server) {
18065 while(!cds_wfcq_empty(&server->dispatchQueue_head, &server->dispatchQueue_tail)) {
18066 struct DispatchJob *dj = (
struct DispatchJob*)
18067 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18068 processJob(server, &dj->job);
18103 if(tmpRj->nextTime >= nextTime_max)
18105 if(tmpRj->interval == rj->interval &&
18107 nextTime_max = tmpRj->nextTime;
18112 rj->nextTime = nextTime_max;
18134 rj->interval = interval_dt;
18138 #ifdef UA_ENABLE_MULTITHREADING 18140 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18146 .type = UA_JOBTYPE_METHODCALL,
18147 .job.methodCall = {.data = rj, .method = (void (*)(UA_Server*,
void*))addRepeatedJob}};
18148 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18151 addRepeatedJob(server, rj);
18166 tmp_last.nextTime = current-1;
18172 if(rj->nextTime > current)
18176 #ifdef UA_ENABLE_MULTITHREADING 18177 dispatchJob(server, &rj->job);
18178 *dispatched =
true;
18180 struct RepeatedJob **previousNext = rj->next.le_prev;
18181 processJob(server, &rj->job);
18185 if((
void*)*previousNext != (
void*)rj) {
18187 "The current repeated job removed itself");
18198 rj->nextTime += (
UA_Int64)rj->interval;
18202 if(rj->nextTime < current)
18203 rj->nextTime = current + 1;
18207 if(last_dispatched->nextTime == rj->nextTime) {
18210 UA_assert(last_dispatched != &tmp_last);
18211 prev_rj = last_dispatched;
18214 prev_rj =
LIST_FIRST(&server->repeatedJobs);
18217 if(!n || n->nextTime >= rj->nextTime)
18224 if(prev_rj != rj) {
18230 last_dispatched = rj;
18236 if(first && first->nextTime < next)
18237 next = first->nextTime;
18243 removeRepeatedJob(UA_Server *server,
UA_Guid *jobId) {
18252 #ifdef UA_ENABLE_MULTITHREADING 18258 #ifdef UA_ENABLE_MULTITHREADING 18264 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18266 .type = UA_JOBTYPE_METHODCALL,
18267 .job.methodCall = {.data = idptr, .method = (void (*)(UA_Server*,
void*))removeRepeatedJob}};
18268 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18270 removeRepeatedJob(server, &jobId);
18288 delayed_free(UA_Server *server,
void *data) {
18296 #ifndef UA_ENABLE_MULTITHREADING 18308 dj->job.type = UA_JOBTYPE_METHODCALL;
18309 dj->job.job.methodCall.data = data;
18310 dj->job.job.methodCall.method = callback;
18316 processDelayedCallbacks(UA_Server *server) {
18320 processJob(server, &dj->job);
18327 #define DELAYEDJOBSSIZE 100 // Collect delayed jobs until we have DELAYEDWORKSIZE items 18329 struct DelayedJobs {
18330 struct DelayedJobs *next;
18333 UA_Job jobs[DELAYEDJOBSSIZE];
18337 static void getCounters(UA_Server *server,
struct DelayedJobs *delayed) {
18339 for(
UA_UInt16 i = 0; i < server->config.nThreads; ++i)
18340 counters[i] = server->workers[i].counter;
18341 delayed->workerCounters = counters;
18348 addDelayedJob(UA_Server *server,
UA_Job *job) {
18349 struct DelayedJobs *dj = server->delayedJobs;
18350 if(!dj || dj->jobsCount >= DELAYEDJOBSSIZE) {
18352 dj =
UA_malloc(
sizeof(
struct DelayedJobs));
18355 "Not enough memory to add a delayed job");
18359 dj->workerCounters =
NULL;
18360 dj->next = server->delayedJobs;
18361 server->delayedJobs = dj;
18367 {.method = (void (*)(UA_Server*,
void*))getCounters, .data = dj->next}};
18368 dispatchJob(server, &setCounter);
18371 dj->jobs[dj->jobsCount] = *job;
18376 addDelayedJobAsync(UA_Server *server,
UA_Job *job) {
18377 addDelayedJob(server, job);
18386 j->
type = UA_JOBTYPE_METHODCALL;
18389 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18390 mlw->job = (
UA_Job) {.type = UA_JOBTYPE_METHODCALL, .job.methodCall =
18392 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18398 dispatchDelayedJobs(UA_Server *server,
void *_) {
18400 struct DelayedJobs *dw = server->delayedJobs, *beforedw = dw;
18406 if(!dw->workerCounters) {
18412 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18413 if(dw->workerCounters[i] == server->workers[i].counter) {
18426 for(
size_t i = 0; i < dw->jobsCount; ++i)
18427 processJob(server, &dw->jobs[i]);
18428 struct DelayedJobs *next = UA_atomic_xchg((
void**)&beforedw->next,
NULL);
18441 #ifdef UA_ENABLE_MULTITHREADING 18442 static void processMainLoopJobs(UA_Server *server) {
18444 struct cds_lfs_head *head = __cds_lfs_pop_all(&server->mainLoopJobs);
18447 struct MainLoopJob *mlw = (
struct MainLoopJob*)&head->node;
18448 struct MainLoopJob *next;
18450 processJob(server, &mlw->job);
18451 next = (
struct MainLoopJob*)mlw->node.next;
18454 }
while((mlw = next));
18459 #ifdef UA_ENABLE_MULTITHREADING 18462 "Spinning up %u worker thread(s)", server->config.nThreads);
18463 pthread_cond_init(&server->dispatchQueue_condition, 0);
18464 pthread_mutex_init(&server->dispatchQueue_mutex, 0);
18465 server->workers =
UA_malloc(server->config.nThreads *
sizeof(UA_Worker));
18466 if(!server->workers)
18468 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18469 UA_Worker *worker = &server->workers[i];
18470 worker->server = server;
18471 worker->counter = 0;
18472 worker->running =
true;
18473 pthread_create(&worker->thr,
NULL, (
void* (*)(
void*))workerLoop, worker);
18477 UA_Job processDelayed = {.
type = UA_JOBTYPE_METHODCALL,
18484 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18486 result |= nl->
start(nl, server->config.logger);
18495 completeMessages(UA_Server *server,
UA_Job *job) {
18502 "Lost message(s) from Connection %i as memory could not be allocated",
18506 "Could not merge half-received messages on Connection %i with error 0x%08x",
18508 job->
type = UA_JOBTYPE_NOTHING;
18512 job->
type = UA_JOBTYPE_BINARYMESSAGE_ALLOCATED;
18516 job->
type = UA_JOBTYPE_NOTHING;
18520 #ifdef UA_ENABLE_MULTITHREADING 18522 processMainLoopJobs(server);
18527 UA_DateTime nextRepeated = processRepeatedJobs(server, now, &dispatched);
18534 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18539 if(i == server->config.networkLayersSize-1)
18540 jobsSize = nl->
getJobs(nl, &jobs, timeout);
18542 jobsSize = nl->
getJobs(nl, &jobs, 0);
18544 for(
size_t k = 0; k < jobsSize; ++k) {
18545 #ifdef UA_ENABLE_MULTITHREADING 18547 if(jobs[k].type == UA_JOBTYPE_METHODCALL_DELAYED) {
18548 addDelayedJob(server, &jobs[k]);
18549 jobs[k].
type = UA_JOBTYPE_NOTHING;
18554 if(jobs[k].type == UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER)
18555 completeMessages(server, &jobs[k]);
18559 for(
size_t j = 0; j < jobsSize; ++j) {
18560 #ifdef UA_ENABLE_MULTITHREADING 18561 dispatchJob(server, &jobs[j]);
18564 processJob(server, &jobs[j]);
18573 #ifdef UA_ENABLE_MULTITHREADING 18576 pthread_cond_broadcast(&server->dispatchQueue_condition);
18578 processDelayedCallbacks(server);
18583 if(nextRepeated > now)
18589 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18592 size_t stopJobsSize = nl->
stop(nl, &stopJobs);
18593 for(
size_t j = 0; j < stopJobsSize; ++j)
18594 processJob(server, &stopJobs[j]);
18598 #ifdef UA_ENABLE_MULTITHREADING 18600 if(server->workers) {
18602 "Shutting down %u worker thread(s)", server->config.nThreads);
18604 for(
size_t i = 0; i < server->config.nThreads; ++i)
18605 server->workers[i].running =
false;
18606 pthread_cond_broadcast(&server->dispatchQueue_condition);
18607 for(
size_t i = 0; i < server->config.nThreads; ++i)
18608 pthread_join(server->workers[i].thr,
NULL);
18611 server->workers =
NULL;
18615 emptyDispatchQueue(server);
18619 processDelayedCallbacks(server);
18640 #define STARTCHANNELID 1 18641 #define STARTTOKENID 1 18648 cm->currentChannelCount = 0;
18649 cm->server = server;
18663 removeSecureChannelCallback(UA_Server *server,
void *entry) {
18676 "Could not remove the secure channel with error code %s",
18677 UA_StatusCode_name(retval));
18683 UA_atomic_add(&cm->currentChannelCount, (
UA_UInt32)-1);
18694 if(timeout < nowMonotonic || !entry->channel.
connection) {
18696 "SecureChannel has timed out");
18697 removeSecureChannel(cm, entry);
18710 "Channel was purged since maxSecureChannels was " 18711 "reached and channel had no session attached");
18712 removeSecureChannel(cm, entry);
18729 if(cm->currentChannelCount >= cm->server->config.maxSecureChannels && !purgeFirstChannelWithoutSession(cm)){
18762 UA_atomic_add(&cm->currentChannelCount, 1);
18788 UA_ByteString_deleteMembers(&channel->
clientNonce);
18820 return removeSecureChannel(cm, entry);
18833 sm->currentSessionCount = 0;
18834 sm->server = server;
18849 removeSessionCallback(UA_Server *server,
void *entry) {
18858 sentry->session.activated =
false;
18865 "Could not remove session with error code %s",
18866 UA_StatusCode_name(retval));
18872 UA_atomic_add(&sm->currentSessionCount, (
UA_UInt32)-1);
18882 if(sentry->session.validTill >= nowMonotonic)
18885 "Session has timed out");
18886 removeSession(sm, sentry);
18901 "Client tries to use a session that has timed out");
18906 return ¤t->session;
18920 if(sm->currentSessionCount >= sm->server->config.maxSessions)
18927 UA_atomic_add(&sm->currentSessionCount, 1);
18929 newentry->session.sessionId = UA_NODEID_GUID(1,
UA_Guid_random());
18930 newentry->session.authenticationToken = UA_NODEID_GUID(1,
UA_Guid_random());
18936 newentry->session.timeout = sm->server->config.maxSessionTimeout;
18940 *session = &newentry->session;
18953 return removeSession(sm, current);
18965 UA_NodeId_deleteMembers(&node->nodeId);
18966 UA_QualifiedName_deleteMembers(&node->browseName);
18967 UA_LocalizedText_deleteMembers(&node->displayName);
18968 UA_LocalizedText_deleteMembers(&node->description);
18971 node->references =
NULL;
18972 node->referencesSize = 0;
18975 switch(node->nodeClass) {
18985 UA_NodeId_deleteMembers(&p->dataType);
18988 p->arrayDimensions =
NULL;
18989 p->arrayDimensionsSize = 0;
18991 UA_DataValue_deleteMembers(&p->value.data.value);
19018 src->arrayDimensionsSize,
19019 (
void**)&dst->arrayDimensions,
19023 dst->arrayDimensionsSize = src->arrayDimensionsSize;
19024 retval = UA_NodeId_copy(&src->dataType, &dst->dataType);
19025 dst->valueRank = src->valueRank;
19026 dst->valueSource = src->valueSource;
19028 retval |= UA_DataValue_copy(&src->value.data.value,
19029 &dst->value.data.value);
19030 dst->value.data.callback = src->value.data.callback;
19032 dst->value.dataSource = src->value.dataSource;
19038 UA_StatusCode retval = UA_CommonVariableNode_copy(src, dst);
19051 dst->isAbstract = src->isAbstract;
19095 if(src->nodeClass != dst->nodeClass)
19099 UA_StatusCode retval = UA_NodeId_copy(&src->nodeId, &dst->nodeId);
19100 dst->nodeClass = src->nodeClass;
19101 retval |= UA_QualifiedName_copy(&src->browseName, &dst->browseName);
19102 retval |= UA_LocalizedText_copy(&src->displayName, &dst->displayName);
19103 retval |= UA_LocalizedText_copy(&src->description, &dst->description);
19104 dst->writeMask = src->writeMask;
19105 dst->userWriteMask = src->userWriteMask;
19110 retval |=
UA_Array_copy(src->references, src->referencesSize,
19111 (
void**)&dst->references,
19117 dst->referencesSize = src->referencesSize;
19120 switch(src->nodeClass) {
19169 #ifndef UA_ENABLE_MULTITHREADING 19171 #define UA_NODESTORE_MINSIZE 64 19178 #define UA_NODESTORE_TOMBSTONE ((UA_NodeStoreEntry*)0x01) 19190 7, 13, 31, 61, 127, 251,
19191 509, 1021, 2039, 4093, 8191, 16381,
19192 32749, 65521, 131071, 262139, 524287, 1048573,
19193 2097143, 4194301, 8388593, 16777213, 33554393, 67108859,
19194 134217689, 268435399, 536870909, 1073741789, 2147483647, 4294967291
19204 while(low != high) {
19206 if(n > primes[mid])
19217 switch(nodeClass) {
19248 entry->
node.nodeClass = nodeClass;
19317 UA_UInt32 nindex = higher_prime_index(count * 2);
19328 for(
size_t i = 0, j = 0; i < osize && j < count; ++i) {
19367 deleteEntry(entries[i]);
19378 return &entry->
node;
19385 deleteEntry(entry);
19396 tempNodeid = node->nodeId;
19401 if(node->nodeId.namespaceIndex == 0)
19402 node->nodeId.namespaceIndex = 1;
19405 UA_UInt32 increase = mod2(identifier, size);
19407 node->nodeId.identifier.numeric = identifier;
19408 entry = findSlot(ns, &node->nodeId);
19411 identifier += increase;
19412 if(identifier >= size)
19413 identifier -= size;
19416 entry = findSlot(ns, &node->nodeId);
19435 if(*entry != newEntry->
orig) {
19437 deleteEntry(newEntry);
19440 deleteEntry(*entry);
19450 return (
const UA_Node*)&(*entry)->node;
19475 deleteEntry(*slot);
19501 #ifdef UA_ENABLE_MULTITHREADING 19502 #include <urcu/rculfhash.h> 19505 struct cds_lfht_node htn;
19506 struct rcu_head rcu_head;
19507 struct nodeEntry *orig;
19511 static struct nodeEntry * instantiateEntry(
UA_NodeClass class) {
19512 size_t size =
sizeof(
struct nodeEntry) - sizeof(UA_Node);
19541 struct nodeEntry *entry =
UA_calloc(1, size);
19544 entry->node.nodeClass =
class;
19548 static void deleteEntry(
struct rcu_head *head) {
19549 struct nodeEntry *entry =
container_of(head,
struct nodeEntry, rcu_head);
19555 static int compare(
struct cds_lfht_node *htn,
const void *orig) {
19558 const UA_NodeId *newid = &((
struct nodeEntry *)htn)->node.nodeId;
19564 return (
UA_NodeStore*)cds_lfht_new(64, 64, 0, CDS_LFHT_AUTO_RESIZE,
NULL);
19570 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19571 struct cds_lfht_iter iter;
19572 cds_lfht_first(ht, &iter);
19574 if(!cds_lfht_del(ht, iter.node)) {
19576 struct nodeEntry *entry = (
struct nodeEntry*) iter.
node;
19577 call_rcu(&entry->rcu_head, deleteEntry);
19579 cds_lfht_next(ht, &iter);
19582 cds_lfht_destroy(ht,
NULL);
19587 struct nodeEntry *entry = instantiateEntry(
class);
19590 return (UA_Node*)&entry->node;
19594 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19595 deleteEntry(&entry->rcu_head);
19600 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19601 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19602 cds_lfht_node_init(&entry->htn);
19603 struct cds_lfht_node *result;
19606 tempNodeid = node->nodeId;
19610 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19612 if(result != &entry->htn) {
19613 deleteEntry(&entry->rcu_head);
19619 if(node->nodeId.namespaceIndex == 0)
19620 node->nodeId.namespaceIndex = 1;
19622 unsigned long identifier;
19623 long before, after;
19624 cds_lfht_count_nodes(ht, &before, &identifier, &after);
19627 node->nodeId.identifier.numeric = (
UA_UInt32)identifier;
19630 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19631 if(result == &entry->htn)
19633 node->nodeId.identifier.numeric += (
UA_UInt32)(identifier * 2654435761);
19641 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19642 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19646 struct cds_lfht_iter iter;
19647 cds_lfht_lookup(ht, h, compare, &node->nodeId, &iter);
19652 struct nodeEntry *oldEntry = (
struct nodeEntry*)iter.node;
19653 if(oldEntry != entry->orig) {
19654 deleteEntry(&entry->rcu_head);
19658 cds_lfht_node_init(&entry->htn);
19659 if(cds_lfht_replace(ht, &iter, h, compare, &node->nodeId, &entry->htn) != 0) {
19661 deleteEntry(&entry->rcu_head);
19666 call_rcu(&oldEntry->rcu_head, deleteEntry);
19672 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19674 struct cds_lfht_iter iter;
19675 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19676 if(!iter.node || cds_lfht_del(ht, iter.node) != 0)
19678 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19679 call_rcu(&entry->rcu_head, deleteEntry);
19685 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19687 struct cds_lfht_iter iter;
19688 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19689 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19692 return &found_entry->node;
19697 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19699 struct cds_lfht_iter iter;
19700 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19701 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19704 struct nodeEntry *
new = instantiateEntry(entry->node.nodeClass);
19708 deleteEntry(&new->rcu_head);
19717 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19718 struct cds_lfht_iter iter;
19719 cds_lfht_first(ht, &iter);
19720 while(iter.node !=
NULL) {
19721 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19722 visitor(&found_entry->node);
19723 cds_lfht_next(ht, &iter);
19746 UA_ApplicationDescription_copy(&server->config.applicationDescription, descr);
19757 UA_ApplicationDescription_delete(descr);
19765 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
19779 if(endpointUrl->
length > 0) {
19780 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with endpointUrl " \
19783 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with an empty endpointUrl");
19793 size_t relevant_count = 0;
19796 relevant_endpoints[j] =
true;
19803 relevant_endpoints[j] =
true;
19810 if(relevant_count == 0) {
19816 size_t clone_times = 1;
19818 if(endpointUrl->
length == 0) {
19819 clone_times = server->config.networkLayersSize;
19820 nl_endpointurl =
true;
19832 for(
size_t i = 0; i < clone_times; ++i) {
19834 endpointUrl = &server->config.networkLayers[i].discoveryUrl;
19836 if(!relevant_endpoints[j])
19870 "Connection %i | SecureChannel %i | OpenSecureChannel: Opened SecureChannel",
19874 "Connection %i | OpenSecureChannel: Opening a SecureChannel failed",
19883 "Connection %i | SecureChannel %i | OpenSecureChannel: SecureChannel renewed",
19887 "Connection %i | OpenSecureChannel: Renewing SecureChannel failed",
19926 UA_Session *newSession;
19930 UA_LOG_DEBUG_CHANNEL(server->config.logger, channel,
"Processing CreateSessionRequest failed");
19957 if(++channel->invalidSessionAccessCounter > 3)
19960 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19965 channel->invalidSessionAccessCounter = 0;
19970 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19986 if(server->config.enableAnonymousLogin &&
19994 }
else if(server->config.enableUsernamePasswordLogin &&
20016 for(
size_t i = 0; i < server->config.usernamePasswordLoginsSize; ++i) {
20017 UA_String *user = &server->config.usernamePasswordLogins[i].username;
20018 UA_String *pw = &server->config.usernamePasswordLogins[i].password;
20026 "ActivateSession: Did not find matching username/password");
20038 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Detach from old channel");
20046 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Session activated");
20063 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20070 UA_Variant_init(v);
20072 v->
data = (
void*)(uintptr_t)p;
20100 compatibleValueRankArrayDimensions(
UA_Int32 valueRank,
size_t arrayDimensionsSize) {
20101 switch(valueRank) {
20103 if(arrayDimensionsSize > 1)
20109 if(arrayDimensionsSize > 0)
20113 if(arrayDimensionsSize < 1)
20121 if(arrayDimensionsSize != (
size_t)valueRank)
20135 if(!UA_Variant_isScalar(value))
20137 return compatibleValueRankArrayDimensions(valueRank, arrayDims);
20142 const UA_UInt32 *constraintArrayDimensions,
20143 size_t testArrayDimensionsSize,
20144 const UA_UInt32 *testArrayDimensions) {
20146 if(constraintArrayDimensionsSize == 0) {
20151 if(testArrayDimensionsSize != constraintArrayDimensionsSize)
20155 for(
size_t i = 0; i < constraintArrayDimensionsSize; ++i) {
20156 if(constraintArrayDimensions[i] != testArrayDimensions[i] &&
20157 constraintArrayDimensions[i] != 0)
20166 convertToMatchingValue(UA_Server *server,
const UA_Variant *value,
20169 if(!targetDataType)
20176 UA_Variant_isScalar(value)) {
20182 return editableValue;
20190 *editableValue = *value;
20192 editableValue->
type = targetDataType;
20193 return editableValue;
20209 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
20230 value = convertToMatchingValue(server, value, targetDataTypeId, editableValue);
20241 if(valueArrayDimensions == 0 && !UA_Variant_isScalar(value)) {
20242 valueArrayDimensionsSize = 1;
20244 valueArrayDimensions = &tempArrayDimensions;
20249 if(targetArrayDimensionsSize > 0)
20251 valueArrayDimensionsSize, valueArrayDimensions);
20254 return compatibleValueRankValue(targetValueRank, value);
20271 writeArrayDimensionsAttribute(UA_Server *server,
UA_VariableNode *node,
20272 size_t arrayDimensionsSize,
UA_UInt32 *arrayDimensions) {
20280 UA_StatusCode retval = compatibleValueRankArrayDimensions(node->valueRank, arrayDimensionsSize);
20283 "The current value rank does not match the new array dimensions");
20294 if(vt->arrayDimensions) {
20296 arrayDimensionsSize, arrayDimensions);
20299 "Array dimensions in the variable type do not match");
20306 UA_DataValue_init(&value);
20314 UA_DataValue_deleteMembers(&value);
20317 "Array dimensions in the current value do not match");
20323 UA_UInt32 *oldArrayDimensions = node->arrayDimensions;
20324 retval =
UA_Array_copy(arrayDimensions, arrayDimensionsSize,
20329 node->arrayDimensionsSize = arrayDimensionsSize;
20338 writeValueRankAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20356 switch(constraintValueRank) {
20358 if(valueRank != -1 && valueRank != 1)
20364 if(valueRank != -1)
20372 if(valueRank != constraintValueRank)
20379 size_t arrayDims = node->arrayDimensionsSize;
20381 if(arrayDims == 0) {
20385 UA_DataValue_init(&value);
20391 if(!UA_Variant_isScalar(&value.
value))
20393 UA_DataValue_deleteMembers(&value);
20395 retval = compatibleValueRankArrayDimensions(valueRank, arrayDims);
20401 node->valueRank = valueRank;
20410 writeDataTypeAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20431 constraintDataType, &subtypeId, 1))
20436 UA_DataValue_init(&value);
20442 node->arrayDimensionsSize, node->arrayDimensions,
20444 UA_DataValue_deleteMembers(&value);
20447 "The current value does not match the new data type");
20454 retval = UA_NodeId_copy(dataType, &node->dataType);
20456 node->dataType = dtCopy;
20459 UA_NodeId_deleteMembers(&dtCopy);
20470 if(vn->value.data.callback.onRead) {
20472 vn->value.data.callback.onRead(vn->value.data.callback.handle,
20473 vn->nodeId, &vn->value.data.value.value, rangeptr);
20475 #ifdef UA_ENABLE_MULTITHREADING 20482 *v = vn->value.data.value;
20491 if(!vn->value.dataSource.read)
20498 vn->value.dataSource.read(vn->value.dataSource.handle, vn->nodeId,
20499 sourceTimeStamp, rangeptr, v);
20505 readValueAttributeComplete(UA_Server *server,
const UA_VariableNode *vn,
20512 if(indexRange && indexRange->
length > 0) {
20521 retval = readValueAttributeFromNode(server, vn, v, rangeptr);
20523 retval = readValueAttributeFromDataSource(vn, v, timestamps, rangeptr);
20539 UA_StatusCode retval = UA_DataValue_copy(value, &node->value.data.value);
20541 UA_DataValue_deleteMembers(&old_value);
20543 node->value.data.value = old_value;
20551 if(value->
status != node->value.data.value.status ||
20552 !value->
hasValue || !node->value.data.value.hasValue)
20558 if(UA_Variant_isScalar(&value->
value)) {
20559 editableValue = value->
value;
20561 v = &editableValue;
20571 node->value.data.value.hasStatus = value->
hasStatus;
20572 node->value.data.value.status = value->
status;
20587 if(indexRange && indexRange->
length > 0) {
20601 retval =
typeCheckValue(server, &node->dataType, node->valueRank,
20602 node->arrayDimensionsSize, node->arrayDimensions,
20603 &value->
value, rangeptr, &editableValue.
value);
20617 retval = writeValueAttributeWithoutRange(node, &editableValue);
20619 retval = writeValueAttributeWithRange(node, &editableValue, rangeptr);
20624 #ifdef UA_ENABLE_MULTITHREADING 20628 writtenNode = node;
20632 writtenNode->value.data.callback.onWrite(writtenNode->value.data.callback.handle,
20633 writtenNode->nodeId,
20634 &writtenNode->value.data.value.value, rangeptr);
20638 if(node->value.dataSource.write) {
20640 retval = node->value.dataSource.write(node->value.dataSource.handle,
20641 node->nodeId, &editableValue.
value, rangeptr);
20660 readIsAbstractAttribute(
const UA_Node *node,
UA_Variant *v) {
20662 switch(node->nodeClass) {
20683 writeIsAbstractAttribute(UA_Node *node,
UA_Boolean value) {
20684 switch(node->nodeClass) {
20707 static const UA_String binEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
20710 #define CHECK_NODECLASS(CLASS) \ 20711 if(!(node->nodeClass & (CLASS))) { \ 20712 retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID; \ 20761 forceVariantSetScalar(&v->
value, &node->description, &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20767 forceVariantSetScalar(&v->
value, &node->userWriteMask, &
UA_TYPES[UA_TYPES_UINT32]);
20770 retval = readIsAbstractAttribute(node, &v->
value);
20780 &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20784 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->containsNoLoops,
20789 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->eventNotifier,
20794 retval = readValueAttributeComplete(server, (
const UA_VariableNode*)node,
20809 retval = readArrayDimensionsAttribute((
const UA_VariableNode*)node, v);
20896 if(request->
maxAge < 0) {
20901 for(
size_t i = 0;i < size;++i) {
20906 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20912 UA_ExtensionObject_init(&additionalHeader);
20917 UA_Variant_init(&variant);
20922 variant.
data = expireArray;
20953 UA_DataValue_init(&dv);
20967 UA_ReadValueId_init(&item);
20979 UA_DataValue_deleteMembers(&dv);
20988 retval = UA_Variant_copy(&dv.
value, v);
21013 #define CHECK_DATATYPE_SCALAR(EXP_DT) \ 21014 if(!wvalue->value.hasValue || \ 21015 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21016 !UA_Variant_isScalar(&wvalue->value.value)) { \ 21017 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21021 #define CHECK_DATATYPE_ARRAY(EXP_DT) \ 21022 if(!wvalue->value.hasValue || \ 21023 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21024 UA_Variant_isScalar(&wvalue->value.value)) { \ 21025 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21029 #define CHECK_NODECLASS_WRITE(CLASS) \ 21030 if((node->nodeClass & (CLASS)) == 0) { \ 21031 retval = UA_STATUSCODE_BADNODECLASSINVALID; \ 21038 CopyAttributeIntoNode(UA_Server *server, UA_Session *session,
21049 UA_QualifiedName_deleteMembers(&node->browseName);
21050 UA_QualifiedName_copy(value, &node->browseName);
21054 UA_LocalizedText_deleteMembers(&node->displayName);
21055 UA_LocalizedText_copy(value, &node->displayName);
21059 UA_LocalizedText_deleteMembers(&node->description);
21060 UA_LocalizedText_copy(value, &node->description);
21064 node->writeMask = *(
const UA_UInt32*)value;
21068 node->userWriteMask = *(
const UA_UInt32*)value;
21072 retval = writeIsAbstractAttribute(node, *(
const UA_Boolean*)value);
21113 retval = writeArrayDimensionsAttribute(server, (
UA_VariableNode*)node,
21153 "WriteRequest returned status code %s",
21154 UA_StatusCode_name(retval));
21196 const void *attr) {
21198 UA_WriteValue_init(&wvalue);
21199 wvalue.
nodeId = *nodeId;
21223 addReference(UA_Server *server, UA_Session *session,
21227 deleteReference(UA_Server *server, UA_Session *session,
21231 deleteNode(UA_Server *server, UA_Session *session,
21242 checkParentReference(UA_Server *server, UA_Session *session,
UA_NodeClass nodeClass,
21253 "AddNodes: Parent node not found");
21260 if(!referenceType) {
21262 "AddNodes: Reference type to the parent not found");
21269 "AddNodes: Reference type to the parent invalid");
21276 "AddNodes: Abstract reference type to the parent not allowed");
21289 "AddNodes: New type node need to have a " 21290 "HasSubType reference");
21294 if(parent->nodeClass != nodeClass) {
21296 "AddNodes: New type node needs to be of the same " 21297 "node type as the parent");
21304 const UA_NodeId hierarchicalReference =
21307 &hierarchicalReference, &subtypeId, 1)) {
21309 "AddNodes: Reference type is not hierarchical");
21321 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21323 UA_InstantiationCallback *instantiationCallback);
21326 copyChildNodesToNode(UA_Server *server, UA_Session *session,
21328 UA_InstantiationCallback *instantiationCallback);
21333 copyExistingVariable(UA_Server *server, UA_Session *session,
const UA_NodeId *variable,
21335 UA_InstantiationCallback *instantiationCallback) {
21345 UA_DataValue_init(&value);
21352 UA_VariableAttributes_init(&attr);
21368 UA_AddNodesItem_init(&item);
21385 UA_AddNodesResult_init(&res);
21386 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21391 retval = copyChildNodesToNode(server, session, &node->nodeId,
21395 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21396 instantiationCallback->handle);
21401 UA_Variant_deleteMembers(&value.
value);
21408 copyExistingObject(UA_Server *server, UA_Session *session,
const UA_NodeId *
object,
21410 UA_InstantiationCallback *instantiationCallback) {
21420 UA_ObjectAttributes_init(&attr);
21428 UA_AddNodesItem_init(&item);
21443 UA_AddNodesResult_init(&res);
21444 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21450 UA_StatusCode retval = copyChildNodesToNode(server, session, &node->nodeId,
21453 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21454 instantiationCallback->handle);
21461 setObjectInstanceHandle(UA_Server *server, UA_Session *session,
21471 instantiateNode(UA_Server *server, UA_Session *session,
const UA_NodeId *nodeId,
21473 UA_InstantiationCallback *instantiationCallback) {
21492 size_t hierarchySize = 0;
21499 for(
size_t i = 0; i < hierarchySize; ++i)
21500 retval |= copyChildNodesToNode(server, session, &hierarchy[i], nodeId, instantiationCallback);
21507 const UA_ObjectLifecycleManagement *olm =
21509 if(olm->constructor)
21517 UA_AddReferencesItem_init(&addref);
21522 return addReference(server, session, &addref);
21528 instanceFindAggregateByBrowsename(UA_Server *server, UA_Session *session,
21533 UA_BrowseDescription_init(&bd);
21534 bd.
nodeId = *searchInstance;
21542 UA_BrowseResult_init(&br);
21552 retval = UA_NodeId_copy(&rd->
nodeId.
nodeId, outInstanceNodeId);
21557 UA_BrowseResult_deleteMembers(&br);
21562 mandatoryChild(UA_Server *server, UA_Session *session,
const UA_NodeId *childNodeId) {
21572 for(
size_t i = 0; i < child->referencesSize; ++i) {
21593 copyChildNodesToNode(UA_Server* server, UA_Session* session,
21595 UA_InstantiationCallback* instantiationCallback) {
21598 UA_BrowseDescription_init(&bd);
21599 bd.
nodeId = *sourceNodeId;
21608 UA_BrowseResult_init(&br);
21620 if(!mandatoryChild(server, session, &rd->
nodeId.
nodeId))
21627 retval = instanceFindAggregateByBrowsename(server, session, destinationNodeId,
21637 UA_AddReferencesItem_init(&newItem);
21643 retval = addReference(server, session, &newItem);
21645 retval = copyExistingVariable(server, session, &rd->
nodeId.
nodeId,
21647 instantiationCallback);
21649 retval = copyExistingObject(server, session, &rd->
nodeId.
nodeId,
21651 instantiationCallback);
21664 retval = copyChildNodesToNode(server, session, &rd->
nodeId.
nodeId,
21665 &existingChild, instantiationCallback);
21667 UA_NodeId_deleteMembers(&existingChild);
21672 UA_BrowseResult_deleteMembers(&br);
21680 UA_InstantiationCallback *instantiationCallback,
21692 UA_StatusCode retval = checkParentReference(server, session, node->nodeClass,
21693 parentNodeId, referenceTypeId);
21696 "AddNodes: Checking the reference to the parent returned " 21697 "error code %s", UA_StatusCode_name(retval));
21706 "AddNodes: Node could not be added to the nodestore " 21707 "with error code %s", UA_StatusCode_name(retval));
21713 retval = UA_NodeId_copy(&node->nodeId, addedNodeId);
21716 "AddNodes: Could not copy the nodeid");
21724 UA_AddReferencesItem_init(&item);
21729 retval = addReference(server, session, &item);
21732 "AddNodes: Could not add the reference to the parent" 21733 "with error code %s", UA_StatusCode_name(retval));
21745 typeDefinition = &basedatavariabletype;
21747 typeDefinition = &baseobjecttype;
21751 retval = instantiateNode(server, session, &node->nodeId, node->nodeClass,
21752 typeDefinition, instantiationCallback);
21755 "AddNodes: Could not instantiate the node with" 21756 "error code %s", UA_StatusCode_name(retval));
21762 if(instantiationCallback)
21763 instantiationCallback->method(node->nodeId, *typeDefinition,
21764 instantiationCallback->handle);
21768 deleteNode(server, &adminSession, &node->nodeId,
true);
21781 retval |= UA_QualifiedName_copy(&item->
browseName, &node->browseName);
21782 retval |= UA_LocalizedText_copy(&attr->
displayName, &node->displayName);
21783 retval |= UA_LocalizedText_copy(&attr->
description, &node->description);
21790 copyCommonVariableAttributes(UA_Server *server,
UA_VariableNode *node,
21797 typeDef = &basedatavartype;
21804 node->valueRank = -2;
21819 retval = UA_NodeId_copy(&vt->dataType, &node->dataType);
21832 "Array dimensions incompatible with the VariableType " 21833 "with error code %s", UA_StatusCode_name(retval));
21842 node->valueRank = vt->valueRank;
21845 "Value Rank incompatible with the VariableType " 21846 "with error code %s", UA_StatusCode_name(retval));
21852 UA_DataValue_init(&value);
21862 "Could not read the value of the variable type " 21863 "with error code %s", UA_StatusCode_name(retval));
21872 "Could not set the value of the new node " 21873 "with error code %s", UA_StatusCode_name(retval));
21875 UA_DataValue_deleteMembers(&value);
21880 copyVariableNodeAttributes(UA_Server *server,
UA_VariableNode *vnode,
21887 return copyCommonVariableAttributes(server, vnode, item, attr);
21895 return copyCommonVariableAttributes(server, (
UA_VariableNode*)vtnode, item,
21934 #define CHECK_ATTRIBUTES(TYPE) \ 21935 if(item->nodeAttributes.content.decoded.type != &UA_TYPES[UA_TYPES_##TYPE]) { \ 21936 retval = UA_STATUSCODE_BADNODEATTRIBUTESINVALID; \ 21941 createNodeFromAttributes(UA_Server *server,
const UA_AddNodesItem *item, UA_Node **newNode) {
21955 UA_StatusCode retval = copyStandardAttributes(node, item, data);
21959 retval |= copyObjectNodeAttributes(node, data);
21963 retval |= copyVariableNodeAttributes(server, node, item, data);
21967 retval |= copyObjectTypeNodeAttributes(node, data);
21971 retval |= copyVariableTypeNodeAttributes(server, node, item, data);
21975 retval |= copyReferenceTypeNodeAttributes(node, data);
21979 retval |= copyDataTypeNodeAttributes(node, data);
21983 retval |= copyViewNodeAttributes(node, data);
21999 Service_AddNodes_single(UA_Server *server, UA_Session *session,
22001 UA_InstantiationCallback *instantiationCallback) {
22003 UA_Node *node =
NULL;
22004 result->
statusCode = createNodeFromAttributes(server, item, &node);
22007 "Could not add node with error code %s",
22019 "Could not add node with error code %s",
22042 for(
size_t i = 0; i < size; ++i) {
22043 Service_AddNodes_single(server, session, &request->
nodesToAdd[i],
22054 UA_InstantiationCallback *instantiationCallback,
UA_NodeId *outNewNodeId) {
22057 UA_AddNodesItem_init(&item);
22066 .content.decoded = {attributeType, (
void*)(uintptr_t)attr}};
22070 UA_AddNodesResult_init(&result);
22072 Service_AddNodes_single(server, &adminSession, &item, &result, instantiationCallback);
22102 UA_DataValue_init(&value);
22103 if(dataSource.read)
22104 retval = dataSource.read(dataSource.handle, requestedNewNodeId,
22105 false,
NULL, &value);
22118 UA_AddNodesItem_init(&item);
22123 retval |= copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&editAttr);
22124 retval |= copyVariableNodeAttributes(server, node, &item, &editAttr);
22125 UA_DataValue_deleteMembers(&node->value.data.value);
22127 node->value.dataSource = dataSource;
22128 UA_DataValue_deleteMembers(&value);
22137 UA_AddNodesResult_init(&result);
22139 &referenceTypeId, &typeDefinition,
NULL, outNewNodeId);
22144 #ifdef UA_ENABLE_METHODCALLS 22147 UA_Server_addMethodNode(UA_Server *server,
const UA_NodeId requestedNewNodeId,
22150 UA_MethodCallback method,
void *handle,
22151 size_t inputArgumentsSize,
const UA_Argument* inputArguments,
22152 size_t outputArgumentsSize,
const UA_Argument* outputArguments,
22159 UA_AddNodesItem_init(&item);
22162 copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&attr);
22163 node->executable = attr.executable;
22164 node->userExecutable = attr.userExecutable;
22165 node->attachedMethod = method;
22166 node->methodHandle = handle;
22170 UA_NodeId_init(&newMethodId);
22173 &referenceTypeId, &UA_NODEID_NULL,
NULL, &newMethodId);
22181 if(inputArgumentsSize > 0) {
22182 UA_VariableNode *inputArgumentsVariableNode = UA_NodeStore_newVariableNode();
22183 inputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22184 inputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"InputArguments");
22185 inputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22186 inputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22187 inputArgumentsVariableNode->valueRank = 1;
22198 inputArgumentsVariableNode->nodeId =
22202 inputArguments, inputArgumentsSize,
22204 inputArgumentsVariableNode->value.data.value.hasValue =
true;
22208 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22212 if(outputArgumentsSize > 0) {
22214 UA_VariableNode *outputArgumentsVariableNode = UA_NodeStore_newVariableNode();
22215 outputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22216 outputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"OutputArguments");
22217 outputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22218 outputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22219 outputArgumentsVariableNode->valueRank = 1;
22224 outputArgumentsVariableNode->nodeId =
22228 outputArguments, outputArgumentsSize,
22230 outputArgumentsVariableNode->value.data.value.hasValue =
true;
22234 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22239 *outNewNodeId = newMethodId;
22241 UA_NodeId_deleteMembers(&newMethodId);
22252 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22257 addOneWayReference(UA_Server *server, UA_Session *session,
22259 size_t i = node->referencesSize;
22260 size_t refssize = (i+1) | 3;
22264 node->references = new_refs;
22265 UA_ReferenceNode_init(&new_refs[i]);
22270 node->referencesSize = i+1;
22272 UA_ReferenceNode_deleteMembers(&new_refs[i]);
22277 addReference(UA_Server *server, UA_Session *session,
22294 UA_AddReferencesItem_init(&secondItem);
22323 "Processing AddReferencesRequest");
22336 for(
size_t i = 0; i < response->
resultsSize; ++i)
22346 UA_AddReferencesItem_init(&item);
22352 UA_StatusCode retval = addReference(server, &adminSession, &item);
22362 removeReferences(UA_Server *server, UA_Session *session,
const UA_Node *node) {
22364 UA_DeleteReferencesItem_init(&item);
22366 for(
size_t i = 0; i < node->referencesSize; ++i) {
22367 item.
isForward = node->references[i].isInverse;
22368 item.
sourceNodeId = node->references[i].targetId.nodeId;
22370 deleteReference(server, session, &item);
22375 deleteNode(UA_Server *server, UA_Session *session,
22394 if(deleteReferences)
22395 removeReferences(server, session, node);
22404 "Processing DeleteNodesRequest");
22419 response->
results[i] = deleteNode(server, session, &item->
nodeId,
22429 &nodeId, deleteReferences);
22440 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22443 for(
size_t i = node->referencesSize; i > 0; --i) {
22451 UA_ReferenceNode_deleteMembers(ref);
22453 node->references[i-1] = node->references[node->referencesSize-1];
22454 --node->referencesSize;
22461 if(node->referencesSize == 0 && node->references) {
22463 node->references =
NULL;
22469 deleteReference(UA_Server *server, UA_Session *session,
22478 UA_DeleteReferencesItem_init(&secondItem);
22492 "Processing DeleteReferencesRequest");
22522 UA_StatusCode retval = deleteReference(server, &adminSession, &item);
22532 setValueCallback(UA_Server *server, UA_Session *session,
22536 node->value.data.callback = *callback;
22542 const UA_ValueCallback callback) {
22555 setDataSource(UA_Server *server, UA_Session *session,
22560 UA_DataValue_deleteMembers(&node->value.data.value);
22561 node->value.dataSource = *dataSource;
22568 const UA_DataSource dataSource) {
22581 setOLM(UA_Server *server, UA_Session *session,
22591 UA_ObjectLifecycleManagement olm) {
22603 #ifdef UA_ENABLE_METHODCALLS 22605 struct addMethodCallback {
22606 UA_MethodCallback callback;
22611 editMethodCallback(UA_Server *server, UA_Session* session,
22612 UA_Node* node,
const void* handle) {
22615 const struct addMethodCallback *newCallback = handle;
22623 UA_Server_setMethodNode_callback(UA_Server *server,
const UA_NodeId methodNodeId,
22624 UA_MethodCallback method,
void *handle) {
22625 struct addMethodCallback cb = { method, handle };
22628 &methodNodeId, editMethodCallback, &cb);
22645 UA_ReferenceDescription_init(descr);
22652 retval |= UA_NodeClass_copy(&curr->nodeClass, &descr->
nodeClass);
22654 retval |= UA_QualifiedName_copy(&curr->browseName, &descr->
browseName);
22656 retval |= UA_LocalizedText_copy(&curr->displayName, &descr->
displayName);
22659 for(
size_t i = 0; i < curr->referencesSize; ++i) {
22674 static const UA_Node *
22687 for(
size_t i = 0; i < relevant_count; ++i) {
22689 is_relevant =
true;
22702 *isExternal =
false;
22708 UA_ByteString_deleteMembers(&cp->identifier);
22709 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
22729 size_t referencesCount = 0;
22730 size_t referencesIndex = 0;
22735 descr = &cp->browseDescription;
22736 maxrefs = cp->maxReferences;
22737 continuationIndex = cp->continuationIndex;
22749 size_t relevant_refs_size = 0;
22760 &relevant_refs, &relevant_refs_size);
22765 relevant_refs_size = 1;
22779 if(node->referencesSize == 0) {
22787 size_t real_maxrefs = maxrefs;
22788 if(real_maxrefs == 0)
22789 real_maxrefs = node->referencesSize;
22790 else if(real_maxrefs > node->referencesSize)
22791 real_maxrefs = node->referencesSize;
22799 size_t skipped = 0;
22802 for(; referencesIndex < node->referencesSize && referencesCount < real_maxrefs; ++referencesIndex) {
22803 isExternal =
false;
22804 const UA_Node *current =
22805 returnRelevantNode(server, descr, all_refs, &node->references[referencesIndex],
22806 relevant_refs, relevant_refs_size, &isExternal);
22810 if(skipped < continuationIndex) {
22813 retval |= fillReferenceDescription(server->
nodestore, current,
22814 &node->references[referencesIndex],
22822 if(referencesCount == 0) {
22830 &
UA_TYPES[UA_TYPES_REFERENCEDESCRIPTION]);
22844 if(referencesIndex == node->referencesSize) {
22846 removeCp(cp, session);
22849 cp->continuationIndex += (
UA_UInt32)referencesCount;
22852 }
else if(maxrefs != 0 && referencesCount >= maxrefs) {
22856 LIST_FOREACH(cpLoop, &session->continuationPoints, pointers) {
22861 removeCp(cpLast, session);
22871 UA_BrowseDescription_copy(descr, &cp->browseDescription);
22872 cp->maxReferences = maxrefs;
22873 cp->continuationIndex = (
UA_UInt32) referencesCount;
22874 UA_Guid *ident = UA_Guid_new();
22876 cp->identifier.data = (
UA_Byte*) ident;
22877 cp->identifier.length =
sizeof(
UA_Guid);
22908 for(
size_t i = 0; i < size; ++i) {
22917 UA_BrowseResult_init(&result);
22925 UA_Server_browseNext_single(UA_Server *server, UA_Session *session,
UA_Boolean releaseContinuationPoint,
22930 if(UA_ByteString_equal(&cp->identifier, continuationPoint)) {
22932 if(!releaseContinuationPoint)
22935 removeCp(cp, session);
22956 for(
size_t i = 0; i < size; ++i)
22965 UA_BrowseResult_init(&result);
22967 UA_Server_browseNext_single(server, &adminSession, releaseContinuationPoint,
22968 continuationPoint, &result);
22979 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount,
22981 const UA_NodeId *reftypes,
size_t reftypes_count,
22990 for(
size_t j = 0; j < reftypes_count; ++j) {
23009 result->
targets = tempTargets;
23010 (*targetsSize) *= 2;
23018 if(*nextSize <= *nextCount) {
23028 &(*next)[*nextCount]);
23033 walkBrowsePathElement(UA_Server *server, UA_Session *session,
23037 const UA_NodeId *current,
const size_t currentCount,
23038 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23041 size_t reftypes_count = 1;
23058 for(
size_t i = 0; i < currentCount; ++i) {
23070 if(targetName && (targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23076 for(
size_t r = 0; r < node->referencesSize &&
23079 walkBrowsePathElementNodeReference(result, targetsSize, next, nextSize, nextCount,
23081 reftypes, reftypes_count, reference);
23091 addBrowsePathTargets(UA_Server *server, UA_Session *session,
UA_BrowsePathResult *result,
23093 for(
size_t i = 0; i < currentCount; i++) {
23097 UA_NodeId_deleteMembers(¤t[i]);
23103 if(targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23105 UA_NodeId_deleteMembers(¤t[i]);
23118 walkBrowsePath(UA_Server *server, UA_Session *session,
const UA_BrowsePath *path,
23120 UA_NodeId **current,
size_t *currentSize,
size_t *currentCount,
23121 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23131 walkBrowsePathElement(server, session, result, &targetsSize,
23133 *current, *currentCount, next, nextSize, nextCount);
23136 for(
size_t j = 0; j < *currentCount; j++)
23137 UA_NodeId_deleteMembers(&(*current)[j]);
23149 size_t tSize = *currentSize;
size_t tCount = *currentCount;
UA_NodeId *tT = *current;
23150 *currentSize = *nextSize; *currentCount = *nextCount; *current = *next;
23151 *nextSize = tSize; *nextCount = tCount; *next = tT;
23164 if(targetsSize < result->targetsSize + (*currentCount)) {
23170 for(
size_t i = 0; i < *currentCount; ++i)
23171 UA_NodeId_deleteMembers(&(*current)[i]);
23175 result->
targets = newTargets;
23179 addBrowsePathTargets(server, session, result, targetName, *current, *currentCount);
23184 translateBrowsePathToNodeIds(UA_Server *server, UA_Session *session,
23200 size_t targetsSize = 10;
23211 size_t currentSize = 10;
23212 size_t currentCount = 0;
23219 size_t nextSize = 10;
23220 size_t nextCount = 0;
23240 walkBrowsePath(server, session, path, result, targetsSize,
23241 ¤t, ¤tSize, ¤tCount,
23242 &next, &nextSize, &nextCount);
23256 UA_BrowsePathTarget_deleteMembers(&result->
targets[i]);
23267 UA_BrowsePathResult_init(&result);
23269 translateBrowsePathToNodeIds(server, &adminSession, browsePath, &result);
23277 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing TranslateBrowsePathsToNodeIdsRequest");
23291 for(
size_t i = 0; i < size; ++i)
23292 translateBrowsePathToNodeIds(server, session, &request->
browsePaths[i],
23329 #ifdef UA_ENABLE_METHODCALLS 23332 getArgumentsVariableNode(UA_Server *server,
const UA_MethodNode *ofMethod,
23335 for(
size_t i = 0; i < ofMethod->referencesSize; ++i) {
23336 if(ofMethod->references[i].isInverse ==
false &&
23337 UA_NodeId_equal(&hasProperty, &ofMethod->references[i].referenceTypeId)) {
23338 const UA_Node *refTarget =
23343 refTarget->browseName.namespaceIndex == 0 &&
23353 argumentsConformsToDefinition(UA_Server *server,
const UA_VariableNode *argRequirements,
23358 size_t argReqsSize = argRequirements->value.data.value.value.arrayLength;
23361 if(UA_Variant_isScalar(&argRequirements->value.data.value.value))
23363 if(argReqsSize > argsSize)
23365 if(argReqsSize != argsSize)
23369 for(
size_t i = 0; i < argReqsSize; ++i)
23370 retval |=
typeCheckValue(server, &argReqs[i].dataType, argReqs[i].valueRank,
23371 argReqs[i].arrayDimensionsSize, argReqs[i].arrayDimensions,
23372 &args[i],
NULL, &args[i]);
23383 if(!methodCalled) {
23415 for(
size_t i = 0; i < methodCalled->referencesSize; ++i) {
23416 if(methodCalled->references[i].isInverse &&
23417 UA_NodeId_equal(&methodCalled->references[i].targetId.nodeId, &withObject->nodeId)) {
23419 &hasComponentNodeId, &hasSubTypeNodeId, 1);
23431 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"InputArguments"));
23433 if(!inputArguments) {
23439 result->
statusCode = argumentsConformsToDefinition(server, inputArguments,
23449 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"OutputArguments"));
23450 if(outputArguments) {
23461 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23462 methodCallSession = session;
23467 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23468 methodCallSession =
NULL;
23474 void Service_Call(UA_Server *server, UA_Session *session,
23499 UA_CallMethodResult_init(&result);
23514 #ifdef UA_ENABLE_SUBSCRIPTIONS 23516 #define UA_VALUENCODING_MAXSTACK 512 23526 new->subscription =
NULL;
23527 new->currentQueueSize = 0;
23528 new->maxQueueSize = 0;
23531 UA_String_init(&new->indexRange);
23533 UA_NodeId_init(&new->monitoredNodeId);
23535 memset(&new->sampleJobGuid, 0,
sizeof(
UA_Guid));
23536 new->sampleJobIsRegistered =
false;
23547 UA_DataValue_deleteMembers(&val->value);
23550 monitoredItem->currentQueueSize = 0;
23552 UA_String_deleteMembers(&monitoredItem->indexRange);
23553 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23554 UA_NodeId_deleteMembers(&monitoredItem->monitoredNodeId);
23560 if(mon->currentQueueSize < mon->maxQueueSize)
23563 if(mon->discardOldest)
23566 queueItem =
TAILQ_LAST(&mon->queue, QueueOfQueueDataValues);
23569 UA_DataValue_deleteMembers(&queueItem->value);
23571 --mon->currentQueueSize;
23605 if(binsize > UA_VALUENCODING_MAXSTACK &&
23612 size_t encodingOffset = 0;
23614 NULL,
NULL, encoding, &encodingOffset);
23619 encoding->
length = encodingOffset;
23620 if(!mon->lastSampledValue.data || !
UA_String_equal(encoding, &mon->lastSampledValue))
23637 "Subscription %u | MonitoredItem %i | " 23638 "Not a data change notification",
23639 sub->subscriptionID, monitoredItem->itemId);
23645 UA_ReadValueId_init(&rvid);
23646 rvid.
nodeId = monitoredItem->monitoredNodeId;
23648 rvid.
indexRange = monitoredItem->indexRange;
23650 UA_DataValue_init(&value);
23657 valueEncoding.
data = stackValueEncoding;
23658 valueEncoding.
length = UA_VALUENCODING_MAXSTACK;
23662 UA_StatusCode retval = detectValueChange(monitoredItem, &value,
23663 &valueEncoding, &changed);
23669 if(!newQueueItem) {
23671 "Subscription %u | MonitoredItem %i | " 23672 "Item for the publishing queue could not be allocated",
23673 sub->subscriptionID, monitoredItem->itemId);
23678 if(valueEncoding.
data == stackValueEncoding) {
23682 "Subscription %u | MonitoredItem %i | " 23683 "ByteString to compare values could not be created",
23684 sub->subscriptionID, monitoredItem->itemId);
23688 valueEncoding = cbs;
23695 "Subscription %u | MonitoredItem %i | " 23696 "Item for the publishing queue could not be prepared",
23697 sub->subscriptionID, monitoredItem->itemId);
23702 newQueueItem->value = value;
23704 newQueueItem->clientHandle = monitoredItem->clientHandle;
23709 "Subscription %u | MonitoredItem %u | Sampled a new value",
23710 sub->subscriptionID, monitoredItem->itemId);
23713 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23714 monitoredItem->lastSampledValue = valueEncoding;
23717 ensureSpaceInMonitoredItemQueue(monitoredItem);
23719 ++monitoredItem->currentQueueSize;
23723 if(valueEncoding.
data != stackValueEncoding)
23724 UA_ByteString_deleteMembers(&valueEncoding);
23725 UA_DataValue_deleteMembers(&value);
23731 job.
type = UA_JOBTYPE_METHODCALL;
23736 &mon->sampleJobGuid);
23738 mon->sampleJobIsRegistered =
true;
23743 if(!mon->sampleJobIsRegistered)
23745 mon->sampleJobIsRegistered =
false;
23757 new->session = session;
23758 new->subscriptionID = subscriptionID;
23759 new->sequenceNumber = 0;
23760 new->maxKeepAliveCount = 0;
23761 new->publishingEnabled =
false;
23762 memset(&new->publishJobGuid, 0,
sizeof(
UA_Guid));
23763 new->publishJobIsRegistered =
false;
23764 new->currentKeepAliveCount = 0;
23765 new->currentLifetimeCount = 0;
23766 new->lastMonitoredItemId = 0;
23770 new->retransmissionQueueSize = 0;
23787 TAILQ_REMOVE(&subscription->retransmissionQueue, nme, listEntry);
23788 UA_NotificationMessage_deleteMembers(&nme->message);
23791 subscription->retransmissionQueueSize = 0;
23798 if(mon->itemId == monitoredItemID)
23809 if(mon->itemId == monitoredItemID) {
23820 size_t notifications = 0;
23821 if(sub->publishingEnabled) {
23826 if(notifications >= sub->notificationsPerPublish) {
23827 *moreNotifications =
true;
23834 return notifications;
23838 UA_Subscription_addRetransmissionMessage(UA_Server *server,
UA_Subscription *sub,
23841 if(server->config.maxRetransmissionQueueSize > 0 &&
23842 sub->retransmissionQueueSize >= server->config.maxRetransmissionQueueSize) {
23844 TAILQ_LAST(&sub->retransmissionQueue, UA_ListOfNotificationMessages);
23845 TAILQ_REMOVE(&sub->retransmissionQueue, lastentry, listEntry);
23846 --sub->retransmissionQueueSize;
23847 UA_NotificationMessage_deleteMembers(&lastentry->message);
23853 ++sub->retransmissionQueueSize;
23860 if(entry->message.sequenceNumber != sequenceNumber)
23862 TAILQ_REMOVE(&sub->retransmissionQueue, entry, listEntry);
23863 --sub->retransmissionQueueSize;
23864 UA_NotificationMessage_deleteMembers(&entry->message);
23873 size_t notifications) {
23903 if(l >= notifications)
23907 min->
value = qv->value;
23910 --mon->currentQueueSize;
23917 UA_NotificationMessage_deleteMembers(message);
23923 "Publish Callback", sub->subscriptionID);
23927 size_t notifications = countQueuedNotifications(sub, &moreNotifications);
23930 if(notifications == 0) {
23931 ++sub->currentKeepAliveCount;
23932 if(sub->currentKeepAliveCount < sub->maxKeepAliveCount)
23935 "Subscription %u | Sending a KeepAlive",
23936 sub->subscriptionID)
23945 UA_PublishResponseEntry *pre =
SIMPLEQ_FIRST(&sub->session->responseQueue);
23950 "Subscription %u | Cannot send a publish response " 23951 "since the publish queue is empty", sub->subscriptionID)
23955 ++sub->currentLifetimeCount;
23956 if(sub->currentLifetimeCount > sub->lifeTimeCount) {
23958 "End of lifetime for subscription", sub->subscriptionID);
23959 UA_Session_deleteSubscription(server, sub->session, sub->subscriptionID);
23968 if(notifications > 0) {
23971 if(!retransmission) {
23973 "Subscription %u | Could not allocate memory " 23974 "for retransmission", sub->subscriptionID);
23979 prepareNotificationMessage(sub, message, notifications);
23982 "Subscription %u | Could not prepare the " 23983 "notification message", sub->subscriptionID);
23999 if(notifications == 0) {
24010 UA_Subscription_addRetransmissionMessage(server, sub, retransmission);
24014 size_t available = sub->retransmissionQueueSize;
24015 if(available > 0) {
24028 "Subscription %u | Sending out a publish response with %u " 24029 "notifications", sub->subscriptionID, (
UA_UInt32)notifications);
24035 sub->currentKeepAliveCount = 0;
24036 sub->currentLifetimeCount = 0;
24044 if(moreNotifications)
24050 if(sub->publishJobIsRegistered)
24054 "Subscription %u | Register subscription publishing callback",
24055 sub->subscriptionID);
24057 job.
type = UA_JOBTYPE_METHODCALL;
24062 &sub->publishJobGuid);
24064 sub->publishJobIsRegistered =
true;
24070 if(!sub->publishJobIsRegistered)
24073 "Subscription %u | Unregister subscription publishing callback",
24074 sub->subscriptionID);
24075 sub->publishJobIsRegistered =
false;
24085 UA_NodeId_delete(sessionToken);
24088 if(!session ||
LIST_FIRST(&session->serverSubscriptions))
24092 UA_PublishResponseEntry *pre;
24100 UA_PublishResponse_deleteMembers(response);
24114 #ifdef UA_ENABLE_SUBSCRIPTIONS 24116 #define UA_BOUNDEDVALUE_SETWBOUNDS(BOUNDS, SRC, DST) { \ 24117 if(SRC > BOUNDS.max) DST = BOUNDS.max; \ 24118 else if(SRC < BOUNDS.min) DST = BOUNDS.min; \ 24123 setSubscriptionSettings(UA_Server *server,
UA_Subscription *subscription,
24132 "Could not unregister publish job with error code 0x%08x",
24133 subscription->subscriptionID, retval);
24136 subscription->publishingInterval = requestedPublishingInterval;
24137 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.publishingIntervalLimits,
24138 requestedPublishingInterval, subscription->publishingInterval);
24140 if(requestedPublishingInterval != requestedPublishingInterval)
24141 subscription->publishingInterval = server->config.publishingIntervalLimits.min;
24142 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.keepAliveCountLimits,
24143 requestedMaxKeepAliveCount, subscription->maxKeepAliveCount);
24144 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.lifeTimeCountLimits,
24145 requestedLifetimeCount, subscription->lifeTimeCount);
24146 if(subscription->lifeTimeCount < 3 * subscription->maxKeepAliveCount)
24147 subscription->lifeTimeCount = 3 * subscription->maxKeepAliveCount;
24148 subscription->notificationsPerPublish = maxNotificationsPerPublish;
24149 if(maxNotificationsPerPublish == 0 ||
24150 maxNotificationsPerPublish > server->config.maxNotificationsPerPublish)
24151 subscription->notificationsPerPublish = server->config.maxNotificationsPerPublish;
24152 subscription->priority = priority;
24157 "Could not register publish job with error code 0x%08x",
24158 subscription->subscriptionID, retval);
24167 if(!newSubscription) {
24169 "Processing CreateSubscriptionRequest failed");
24173 newSubscription->subscriptionID = UA_Session_getUniqueSubscriptionID(session);
24174 UA_Session_addSubscription(session, newSubscription);
24181 newSubscription->currentKeepAliveCount = newSubscription->maxKeepAliveCount;
24190 "CreateSubscriptionRequest: Created Subscription %u " 24191 "with a publishing interval of %f ms", response->
subscriptionId,
24192 newSubscription->publishingInterval);
24200 "Processing ModifySubscriptionRequest");
24210 sub->currentLifetimeCount = 0;
24221 "Processing SetPublishingModeRequest");
24235 for(
size_t i = 0; i < size; ++i) {
24237 UA_Session_getSubscriptionByID(session, request->
subscriptionIds[i]);
24244 sub->currentLifetimeCount = 0;
24254 mon->monitoringMode = monitoringMode;
24265 samplingInterval < vn->minimumSamplingInterval)
24269 samplingInterval = 10000.0f;
24271 mon->samplingInterval = samplingInterval;
24272 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.samplingIntervalLimits,
24273 samplingInterval, mon->samplingInterval);
24274 if(samplingInterval != samplingInterval)
24275 mon->samplingInterval = server->config.samplingIntervalLimits.min;
24284 mon->trigger = filter->
trigger;
24288 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.queueSizeLimits,
24299 static const UA_String binaryEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
24303 Service_CreateMonitoredItems_single(UA_Server *server, UA_Session *session,
24312 UA_DataValue_init(&v);
24319 UA_DataValue_deleteMembers(&v);
24322 UA_DataValue_deleteMembers(&v);
24346 &newMon->monitoredNodeId);
24352 newMon->subscription = sub;
24354 newMon->itemId = ++(sub->lastMonitoredItemId);
24355 newMon->timestampsToReturn = timestampsToReturn;
24356 setMonitoredItemSettings(server, newMon, request->
monitoringMode,
24376 "Processing CreateMonitoredItemsRequest");
24391 sub->currentLifetimeCount = 0;
24406 Service_CreateMonitoredItems_single(server, session, sub, request->
timestampsToReturn,
24411 Service_ModifyMonitoredItems_single(UA_Server *server, UA_Session *session,
UA_Subscription *sub,
24420 setMonitoredItemSettings(server, mon, mon->monitoringMode,
24430 "Processing ModifyMonitoredItemsRequest");
24446 sub->currentLifetimeCount = 0;
24461 Service_ModifyMonitoredItems_single(server, session, sub, &request->
itemsToModify[i],
24488 for(
size_t i = 0; i < response->
resultsSize; ++i) {
24512 if(
LIST_EMPTY(&session->serverSubscriptions)) {
24517 UA_PublishResponseEntry *entry =
UA_malloc(
sizeof(UA_PublishResponseEntry));
24522 entry->requestId = requestId;
24526 UA_PublishResponse_init(response);
24546 "Cannot process acknowledgements subscription %u",
24561 LIST_FOREACH(immediate, &session->serverSubscriptions, listEntry) {
24564 "Response on a late subscription", immediate->subscriptionID,
24574 UA_PublishResponse_init(&err_response);
24588 "Processing DeleteSubscriptionsRequest");
24616 if(
LIST_FIRST(&session->serverSubscriptions))
24618 UA_NodeId *sessionToken = UA_NodeId_new();
24630 "Processing DeleteMonitoredItemsRequest");
24645 sub->currentLifetimeCount = 0;
24668 sub->currentLifetimeCount = 0;
24672 TAILQ_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
24696 static void UA_Client_init(
UA_Client* client, UA_ClientConfig config) {
24699 client->
config = config;
24706 UA_Client_init(client, config);
24710 static void UA_Client_deleteMembers(
UA_Client* client) {
24716 UA_UserTokenPolicy_deleteMembers(&client->
token);
24719 UA_String_deleteMembers(&client->
username);
24721 UA_String_deleteMembers(&client->
password);
24722 #ifdef UA_ENABLE_SUBSCRIPTIONS 24723 UA_Client_NotificationsAckNumber *n, *tmp;
24728 UA_Client_Subscription *sub, *tmps;
24730 UA_Client_Subscriptions_forceDelete(client, sub);
24735 UA_Client_deleteMembers(client);
24736 UA_Client_init(client, client->
config);
24740 UA_Client_deleteMembers(client);
24746 return UA_CLIENTSTATE_ERRORED;
24747 return client->
state;
24754 #define UA_MINMESSAGESIZE 8192 24775 retval = UA_TcpHelloMessage_encodeBinary(&hello, &message, &offset);
24776 UA_TcpHelloMessage_deleteMembers(&hello);
24783 retval |= UA_TcpMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24791 retval = conn->
send(conn, &message);
24794 "Sending HEL failed");
24798 "Sent HEL message");
24804 client->
config.timeout);
24807 "Receiving ACK message failed");
24814 retval = UA_TcpMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24815 retval |= UA_TcpAcknowledgeMessage_decodeBinary(&reply, &offset, &ackMessage);
24821 UA_ByteString_deleteMembers(&reply);
24840 UA_TcpAcknowledgeMessage_deleteMembers(&ackMessage);
24861 size_t offset = 12;
24865 UA_AsymmetricAlgorithmSecurityHeader_init(&asymHeader);
24866 asymHeader.
securityPolicyUri = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
24867 retval = UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &message, &offset);
24873 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
24878 retval |= UA_NodeId_encodeBinary(&requestType, &message, &offset);
24882 UA_OpenSecureChannelRequest_init(&opnSecRq);
24888 "Requesting to renew the SecureChannel");
24892 "Requesting to open a SecureChannel");
24897 retval |= UA_OpenSecureChannelRequest_encodeBinary(&opnSecRq, &message, &offset);
24908 retval |= UA_SecureConversationMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24918 retval = conn->
send(conn, &message);
24926 client->
config.timeout);
24929 "Receiving OpenSecureChannelResponse failed");
24935 retval = UA_SecureConversationMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24936 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(&reply, &offset, &asymHeader);
24937 retval |= UA_SequenceHeader_decodeBinary(&reply, &offset, &seqHeader);
24938 retval |= UA_NodeId_decodeBinary(&reply, &offset, &requestType);
24942 UA_ByteString_deleteMembers(&reply);
24943 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24944 UA_NodeId_deleteMembers(&requestType);
24946 "Reply answers the wrong request. Expected OpenSecureChannelResponse.");
24955 retval = UA_OpenSecureChannelResponse_decodeBinary(&reply, &offset, &response);
24961 UA_ByteString_deleteMembers(&reply);
24981 "SecureChannel renewed");
24984 "SecureChannel opened");
24988 "SecureChannel could not be renewed " 24989 "with error code %s", UA_StatusCode_name(retval));
24992 "SecureChannel could not be opened " 24993 "with error code %s", UA_StatusCode_name(retval));
24997 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24998 UA_OpenSecureChannelResponse_deleteMembers(&response);
25005 UA_ActivateSessionRequest_init(&request);
25013 UA_AnonymousIdentityToken_init(identityToken);
25020 UA_UserNameIdentityToken_init(identityToken);
25035 "ActivateSession failed with error code %s",
25040 UA_ActivateSessionRequest_deleteMembers(&request);
25041 UA_ActivateSessionResponse_deleteMembers(&response);
25047 GetEndpoints(
UA_Client *client,
size_t* endpointDescriptionsSize,
25050 UA_GetEndpointsRequest_init(&request);
25057 UA_GetEndpointsResponse_init(&response);
25064 "GetEndpointRequest failed with error code %s",
25065 UA_StatusCode_name(retval));
25066 UA_GetEndpointsResponse_deleteMembers(&response);
25069 *endpointDescriptions = response.
endpoints;
25073 UA_GetEndpointsResponse_deleteMembers(&response);
25078 EndpointsHandshake(
UA_Client *client) {
25080 size_t endpointArraySize = 0;
25081 UA_StatusCode retval = GetEndpoints(client, &endpointArraySize, &endpointArray);
25087 UA_String securityNone = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
25088 UA_String binaryTransport = UA_STRING(
"http://opcfoundation.org/UA-Profile/" 25089 "Transport/uatcp-uasc-uabinary");
25092 for(
size_t i = 0; i < endpointArraySize; ++i) {
25104 endpointFound =
true;
25123 UA_UserTokenPolicy_copy(userToken, &client->
token);
25131 if(!endpointFound) {
25133 "No suitable endpoint found");
25135 }
else if(!tokenFound) {
25137 "No suitable UserTokenPolicy found for the possible endpoints");
25146 UA_CreateSessionRequest_init(&request);
25156 UA_CreateSessionResponse_init(&response);
25163 UA_CreateSessionRequest_deleteMembers(&request);
25164 UA_CreateSessionResponse_deleteMembers(&response);
25171 UA_CloseSessionRequest_init(&request);
25181 UA_CloseSessionRequest_deleteMembers(&request);
25182 UA_CloseSessionResponse_deleteMembers(&response);
25187 CloseSecureChannel(
UA_Client *client) {
25190 UA_CloseSecureChannelRequest_init(&request);
25215 UA_CloseSecureChannelRequest_deleteMembers(&request);
25219 size_t offset = 12;
25220 retval |= UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symHeader, &message, &offset);
25221 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
25222 retval |= UA_NodeId_encodeBinary(&typeId, &message, &offset);
25228 retval |= UA_SecureConversationMessageHeader_encodeBinary(&msgHeader, &message, &offset);
25232 retval = conn->
send(conn, &message);
25237 UA_CloseSecureChannelRequest_deleteMembers(&request);
25243 size_t* endpointDescriptionsSize,
25245 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25247 if(client->
state == UA_CLIENTSTATE_ERRORED)
25267 retval = HelAckHandshake(client);
25269 retval = SecureChannelHandshake(client,
false);
25271 retval = GetEndpoints(client, endpointDescriptionsSize, endpointDescriptions);
25282 const char *username,
const char *password){
25292 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25294 if(client->
state == UA_CLIENTSTATE_ERRORED) {
25301 endpointUrl, client->
config.logger);
25314 retval = HelAckHandshake(client);
25316 retval = SecureChannelHandshake(client,
false);
25318 retval = EndpointsHandshake(client);
25320 retval = SessionHandshake(client);
25322 retval = ActivateSession(client);
25325 client->
state = UA_CLIENTSTATE_CONNECTED;
25337 if(client->
state == UA_CLIENTSTATE_READY)
25343 retval = CloseSession(client);
25346 retval |= CloseSecureChannel(client);
25351 UA_StatusCode retval = SecureChannelHandshake(client,
true);
25353 client->
state = UA_CLIENTSTATE_CONNECTED;
25385 "Server replied with an error message: %s %.*s",
25387 retval = msg->
error;
25391 "Server replied with the wrong message type");
25401 "Reply answers the wrong requestId. " 25402 "Async services are not yet implemented.");
25410 retval = UA_NodeId_decodeBinary(message, &offset, &responseId);
25420 "Reply answers the wrong request. Expected ns=%i,i=%i." 25424 UA_NodeId_deleteMembers(&responseId);
25441 "Error receiving the response");
25448 void *response,
const UA_DataType *responseType) {
25449 UA_init(response, responseType);
25456 client->
state = UA_CLIENTSTATE_ERRORED;
25477 client->
state = UA_CLIENTSTATE_FAULTED;
25483 UA_init(response, responseType);
25493 if(now < maxDate) {
25510 UA_ByteString_deleteMembers(&reply);
25528 UA_ReadRequest_init(&request);
25530 UA_ReadValueId_init(&
id);
25547 UA_ReadResponse_deleteMembers(&response);
25561 UA_ReadResponse_deleteMembers(&response);
25569 UA_BrowseRequest_init(&bReq);
25593 UA_BrowseRequest_deleteMembers(&bReq);
25594 UA_BrowseResponse_deleteMembers(&bResp);
25610 UA_AddReferencesItem_init(&item);
25618 UA_AddReferencesRequest_init(&request);
25624 UA_AddReferencesResponse_deleteMembers(&response);
25628 UA_AddReferencesResponse_deleteMembers(&response);
25631 retval = response.
results[0];
25632 UA_AddReferencesResponse_deleteMembers(&response);
25642 UA_DeleteReferencesItem_init(&item);
25649 UA_DeleteReferencesRequest_init(&request);
25655 UA_DeleteReferencesResponse_deleteMembers(&response);
25659 UA_DeleteReferencesResponse_deleteMembers(&response);
25662 retval = response.
results[0];
25663 UA_DeleteReferencesResponse_deleteMembers(&response);
25671 UA_DeleteNodesItem_init(&item);
25675 UA_DeleteNodesRequest_init(&request);
25681 UA_DeleteNodesResponse_deleteMembers(&response);
25685 UA_DeleteNodesResponse_deleteMembers(&response);
25688 retval = response.
results[0];
25689 UA_DeleteNodesResponse_deleteMembers(&response);
25701 UA_AddNodesRequest_init(&request);
25703 UA_AddNodesItem_init(&item);
25718 UA_AddNodesResponse_deleteMembers(&response);
25722 UA_AddNodesResponse_deleteMembers(&response);
25730 UA_AddNodesResponse_deleteMembers(&response);
25738 #ifdef UA_ENABLE_METHODCALLS 25742 const UA_NodeId methodId,
size_t inputSize,
25743 const UA_Variant *input,
size_t *outputSize,
25747 UA_CallRequest_init(&request);
25749 UA_CallMethodRequest_init(&item);
25767 UA_CallResponse_deleteMembers(&response);
25772 if(output !=
NULL && outputSize !=
NULL) {
25778 UA_CallResponse_deleteMembers(&response);
25796 UA_WriteValue_init(&wValue);
25797 wValue.
nodeId = *nodeId;
25806 UA_WriteRequest_init(&wReq);
25820 UA_WriteResponse_deleteMembers(&wResp);
25827 size_t newArrayDimensionsSize) {
25828 if(!newArrayDimensions)
25832 UA_WriteValue_init(&wValue);
25839 UA_WriteRequest_init(&wReq);
25852 UA_WriteResponse_deleteMembers(&wResp);
25865 UA_ReadValueId_init(&item);
25869 UA_ReadRequest_init(&request);
25881 UA_ReadResponse_deleteMembers(&response);
25894 UA_ReadResponse_deleteMembers(&response);
25901 UA_Variant_init(&res->
value);
25904 }
else if(UA_Variant_isScalar(&res->
value) &&
25913 UA_ReadResponse_deleteMembers(&response);
25920 size_t *outArrayDimensionsSize) {
25922 UA_ReadValueId_init(&item);
25926 UA_ReadRequest_init(&request);
25943 else if(!res->
hasValue || UA_Variant_isScalar(&res->
value))
25948 if(UA_Variant_isScalar(&res->
value) ||
25961 UA_ReadResponse_deleteMembers(&response);
25973 #ifdef UA_ENABLE_SUBSCRIPTIONS 25976 UA_Client_Subscriptions_new(
UA_Client *client, UA_SubscriptionSettings settings,
25979 UA_CreateSubscriptionRequest_init(&request);
25985 request.
priority = settings.priority;
25992 UA_Client_Subscription *newSub =
UA_malloc(
sizeof(UA_Client_Subscription));
26004 newSub->priority = request.
priority;
26007 if(newSubscriptionId)
26008 *newSubscriptionId = newSub->subscriptionID;
26011 UA_CreateSubscriptionResponse_deleteMembers(&response);
26018 UA_Client_Subscription *sub;
26019 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26020 if(sub->subscriptionID == subscriptionId)
26027 UA_Client_MonitoredItem *mon, *tmpmon;
26030 UA_Client_Subscriptions_removeMonitoredItem(client, sub->subscriptionID,
26031 mon->monitoredItemId);
26038 UA_DeleteSubscriptionsRequest_init(&request);
26044 retval = response.
results[0];
26045 UA_DeleteSubscriptionsResponse_deleteMembers(&response);
26049 "Could not remove subscription %u with error code %s",
26050 sub->subscriptionID, UA_StatusCode_name(retval));
26054 UA_Client_Subscriptions_forceDelete(client, sub);
26059 UA_Client_Subscriptions_forceDelete(
UA_Client *client,
26060 UA_Client_Subscription *sub) {
26061 UA_Client_MonitoredItem *mon, *mon_tmp;
26063 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26072 UA_Client_Subscriptions_addMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26074 UA_MonitoredItemHandlingFunction hf,
26075 void *hfContext,
UA_UInt32 *newMonitoredItemId) {
26076 UA_Client_Subscription *sub;
26077 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26078 if(sub->subscriptionID == subscriptionId)
26085 UA_Client_MonitoredItem *newMon =
UA_malloc(
sizeof(UA_Client_MonitoredItem));
26091 UA_CreateMonitoredItemsRequest_init(&request);
26094 UA_MonitoredItemCreateRequest_init(&item);
26116 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26122 UA_NodeId_copy(&nodeId, &newMon->monitoredNodeId);
26123 newMon->attributeID = attributeID;
26124 newMon->clientHandle = client->monitoredItemHandles;
26125 newMon->samplingInterval = sub->publishingInterval;
26126 newMon->queueSize = 1;
26127 newMon->discardOldest =
true;
26128 newMon->handler = hf;
26129 newMon->handlerContext = hfContext;
26132 *newMonitoredItemId = newMon->monitoredItemId;
26135 "Created a monitored item with client handle %u",
26136 client->monitoredItemHandles);
26138 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26143 UA_Client_Subscriptions_removeMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26145 UA_Client_Subscription *sub;
26146 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26147 if(sub->subscriptionID == subscriptionId)
26153 UA_Client_MonitoredItem *mon;
26155 if(mon->monitoredItemId == monitoredItemId)
26163 UA_DeleteMonitoredItemsRequest_init(&request);
26171 retval = response.
results[0];
26172 UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
26176 "Could not remove monitoreditem %u with error code %s",
26177 monitoredItemId, UA_StatusCode_name(retval));
26182 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26194 UA_Client_Subscription *sub;
26195 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26203 "Processing a publish response on subscription %u with %u notifications",
26215 UA_Client_NotificationsAckNumber *ack;
26216 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26240 UA_Client_MonitoredItem *mon;
26243 mon->handler(mon->monitoredItemId, &mitemNot->
value, mon->handlerContext);
26249 "Could not process a notification with clienthandle %u on subscription %u",
26255 UA_Client_NotificationsAckNumber *tmpAck =
UA_malloc(
sizeof(UA_Client_NotificationsAckNumber));
26258 "Not enough memory to store the acknowledgement for a " 26259 "publish message on subscription %u", sub->subscriptionID);
26263 tmpAck->subAck.subscriptionId = sub->subscriptionID;
26268 UA_Client_Subscriptions_manuallySendPublishRequest(
UA_Client *client) {
26269 if (client->
state == UA_CLIENTSTATE_ERRORED)
26273 while(moreNotifications) {
26275 UA_PublishRequest_init(&request);
26278 UA_Client_NotificationsAckNumber *ack;
26279 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry)
26289 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26296 UA_Client_processPublishResponse(client, &request, &response);
26299 UA_PublishResponse_deleteMembers(&response);
26300 UA_PublishRequest_deleteMembers(&request);
26316 #define LEAPOCH (946684800LL + 86400*(31+29)) 26318 #define DAYS_PER_400Y (365*400 + 97) 26319 #define DAYS_PER_100Y (365*100 + 24) 26320 #define DAYS_PER_4Y (365*4 + 1) 26324 long long days, secs, years;
26325 int remdays, remsecs, remyears;
26326 int qc_cycles, c_cycles, q_cycles;
26328 int wday, yday, leap;
26329 static const char days_in_month[] = {31,30,31,30,31,31,30,31,30,31,31,29};
26332 if (t < INT_MIN * 31622400LL || t > INT_MAX * 31622400LL)
26336 days = secs / 86400LL;
26337 remsecs = (int)(secs % 86400);
26343 wday = (int)((3+days)%7);
26344 if (wday < 0) wday += 7;
26354 if (c_cycles == 4) --c_cycles;
26358 if (q_cycles == 25) --q_cycles;
26361 remyears = remdays / 365;
26362 if (remyears == 4) --remyears;
26363 remdays -= remyears * 365;
26365 leap = !remyears && (q_cycles || !c_cycles);
26366 yday = remdays + 31 + 28 + leap;
26367 if (yday >= 365+leap) yday -= 365+leap;
26369 years = remyears + 4*q_cycles + 100*c_cycles + 400LL*qc_cycles;
26371 for (months=0; days_in_month[months] <= remdays; ++months)
26372 remdays -= days_in_month[months];
26374 if (years+100 > INT_MAX || years+100 < INT_MIN)
26377 tm->tm_year = (int)(years + 100);
26378 tm->tm_mon = months + 2;
26379 if (tm->tm_mon >= 12) {
26383 tm->tm_mday = remdays + 1;
26384 tm->tm_wday = wday;
26385 tm->tm_yday = yday;
26387 tm->tm_hour = remsecs / 3600;
26388 tm->tm_min = remsecs / 60 % 60;
26389 tm->tm_sec = remsecs % 60;
26422 rng->
inc = (initseq << 1u) | 1u;
26424 rng->
state += initial_state;
26429 uint64_t oldstate = rng->
state;
26430 rng->
state = oldstate * 6364136223846793005ULL + rng->
inc;
26431 uint32_t xorshifted = (uint32_t)(((oldstate >> 18u) ^ oldstate) >> 27u);
26432 uint32_t rot = (uint32_t)(oldstate >> 59u);
26433 return (xorshifted >> rot) | (xorshifted << ((~rot + 1u) & 31));
26444 #ifndef UA_ENABLE_STATUSCODE_DESCRIPTIONS 26445 static const size_t statusCodeDescriptionsSize = 1;
26447 {0xffffffff,
"StatusCode descriptions not available",
"open62541 was compiled without support for statuscode descriptions"}
26450 static const size_t statusCodeDescriptionsSize = 229;
26470 {
UA_STATUSCODE_BADNOTHINGTODO,
"BadNothingToDo",
"There was nothing to do because the client passed a list of operations with no elements."},
26519 {
UA_STATUSCODE_BADNOTFOUND,
"BadNotFound",
"A requested item was not found or a search operation ended without success."},
26551 {
UA_STATUSCODE_BADNOVALIDCERTIFICATES,
"BadNoValidCertificates",
"The client did not provide at least one software certificate that is valid and meets the profile requirements for the server."},
26556 {
UA_STATUSCODE_BADNODEIDREJECTED,
"BadNodeIdRejected",
"The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client."},
26576 {
UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE,
"GoodResultsMayBeIncomplete",
"The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete."},
26588 {
UA_STATUSCODE_BADTYPEMISMATCH,
"BadTypeMismatch",
"The value supplied for the attribute is not of the same type as the attribute's value."},
26613 {
UA_STATUSCODE_BADDEVICEFAILURE,
"BadDeviceFailure",
"There has been a failure in the device/data source that generates the value that has affected the value."},
26614 {
UA_STATUSCODE_BADSENSORFAILURE,
"BadSensorFailure",
"There has been a failure in the sensor from which the value is derived by the device/data source."},
26623 {
UA_STATUSCODE_UNCERTAINSUBNORMAL,
"UncertainSubNormal",
"The value is derived from multiple sources and has less than the required number of Good sources."},
26645 {
UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED,
"BadTimestampNotSupported",
"The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)."},
26650 {
UA_STATUSCODE_GOODMOREDATA,
"GoodMoreData",
"The data or event field was successfully replaced in the historical database."},
26655 {
UA_STATUSCODE_GOODDATAIGNORED,
"GoodDataIgnored",
"The request pecifies fields which are not valid for the EventType or cannot be saved by the historian."},
26657 {
UA_STATUSCODE_GOODEDITED,
"GoodEdited",
"The value does not come from the real source and has been edited by the server."},
26661 {
UA_STATUSCODE_BADDOMINANTVALUECHANGED,
"BadDominantValueChanged",
"The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad."},
26662 {
UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED,
"UncertainDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain."},
26663 {
UA_STATUSCODE_BADDEPENDENTVALUECHANGED,
"BadDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad."},
26681 {0xffffffff,
"Unknown",
"Unknown StatusCode"},
26687 for(
size_t i = 0; i < statusCodeDescriptionsSize; ++i) {
26688 if(statusCodeDescriptions[i].code == code)
26689 return &statusCodeDescriptions[i];
26691 return &statusCodeDescriptions[statusCodeDescriptionsSize-1];
26700 #if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501) 26703 # undef _WIN32_WINDOWS 26704 # undef _WIN32_WINNT 26705 # define WINVER 0x0501 26706 # define _WIN32_WINDOWS 0x0501 26707 # define _WIN32_WINNT 0x0501 26711 #include <stdlib.h> 26713 #include <string.h> 26717 # include <malloc.h> 26720 # ifdef SLIST_ENTRY 26721 # undef SLIST_ENTRY 26724 # define _WINSOCK_DEPRECATED_NO_WARNINGS 26725 # include <winsock2.h> 26726 # include <ws2tcpip.h> 26727 # define CLOSESOCKET(S) closesocket((SOCKET)S) 26728 # define ssize_t int 26729 # define WIN32_INT (int) 26731 # define CLOSESOCKET(S) close(S) 26732 # define SOCKET int 26734 # include <arpa/inet.h> 26735 # include <netinet/in.h> 26736 # include <sys/select.h> 26737 # include <sys/ioctl.h> 26738 # include <fcntl.h> 26739 # include <unistd.h> 26740 # include <netdb.h> 26742 # include <sys/socket.h> 26744 #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) 26745 # include <sys/param.h> 26747 # include<sys/socket.h> 26750 # ifndef __CYGWIN__ 26751 # include <netinet/tcp.h> 26757 #if defined(_WIN32) || defined(__OpenBSD__) || \ 26758 (defined(__GNU_LIBRARY__) && (__GNU_LIBRARY__ <= 6) && \ 26759 (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 16) || \ 26760 !defined(__GNU_LIBRARY__)) 26761 # define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds) 26762 # define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds) 26764 # define UA_fd_set(fd, fds) FD_SET(fd, fds) 26765 # define UA_fd_isset(fd, fds) FD_ISSET(fd, fds) 26768 #ifdef UA_ENABLE_MULTITHREADING 26769 # include <urcu/uatomic.h> 26773 #define errno__ WSAGetLastError() 26774 # define INTERRUPTED WSAEINTR 26775 # define WOULDBLOCK WSAEWOULDBLOCK 26776 # define AGAIN WSAEWOULDBLOCK 26778 # define errno__ errno 26779 # define INTERRUPTED EINTR 26780 # define WOULDBLOCK EWOULDBLOCK 26781 # define AGAIN EAGAIN 26797 size_t nWritten = 0;
26799 #ifdef MSG_NOSIGNAL 26800 flags = MSG_NOSIGNAL;
26807 size_t bytes_to_send = buf->
length - nWritten;
26811 connection->
close(connection);
26812 socket_close(connection);
26813 UA_ByteString_deleteMembers(buf);
26817 nWritten += (size_t)n;
26818 }
while(nWritten < buf->length);
26819 UA_ByteString_deleteMembers(buf);
26826 if(!response->
data) {
26834 UA_UInt32 timeout_usec = timeout * 1000;
26836 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), timeout_usec % 1000000};
26838 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), (
long int)(timeout_usec % 1000000)};
26840 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26841 (
const char *)&tmptv,
sizeof(
struct timeval));
26843 DWORD timeout_dw = timeout;
26844 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26845 (
const char*)&timeout_dw,
sizeof(DWORD));
26848 UA_ByteString_deleteMembers(response);
26849 socket_close(connection);
26861 UA_UInt32 timeout_usec = timeout * 1000;
26862 struct timeval tmptv = {(
long int)(timeout_usec / 1000000),
26863 (
long int)(timeout_usec % 1000000)};
26864 int retval = select(connection->
sockfd+1, &fdset,
NULL,
NULL, &tmptv);
26866 ret = recv(connection->
sockfd, (
char*)response->
data,
26872 ret = recv(connection->
sockfd, (
char*)response->
data,
26876 ssize_t ret = recv(connection->
sockfd, (
char*)response->
data,
26882 UA_ByteString_deleteMembers(response);
26883 socket_close(connection);
26889 UA_ByteString_deleteMembers(response);
26893 socket_close(connection);
26898 response->
length = (size_t)ret;
26905 if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
26908 int opts = fcntl(sockfd, F_GETFL);
26909 if(opts < 0 || fcntl(sockfd, F_SETFL, opts|O_NONBLOCK) < 0)
26915 static void FreeConnectionCallback(UA_Server *server,
void *ptr) {
26957 #define MAXBACKLOG 100 26982 UA_ByteString_deleteMembers(buf);
26987 UA_ByteString_deleteMembers(buf);
27006 ServerNetworkLayerTCP_closeConnection(
UA_Connection *connection) {
27007 #ifdef UA_ENABLE_MULTITHREADING 27015 #if UA_LOGLEVEL <= 300 27019 "Connection %i | Force closing the connection",
27024 shutdown(connection->
sockfd, 2);
27034 struct sockaddr_in addr;
27035 socklen_t addrlen =
sizeof(
struct sockaddr_in);
27036 int res = getpeername(newsockfd, (
struct sockaddr*)&addr, &addrlen);
27040 "Connection %i | New connection over TCP from %s:%d",
27041 newsockfd, inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
27044 "Connection %i | New connection over TCP, " 27045 "getpeername failed with errno %i", newsockfd, errno);
27053 c->
send = socket_write;
27054 c->
close = ServerNetworkLayerTCP_closeConnection;
27064 "No memory for a new Connection");
27082 char hostname[256];
27083 if(gethostname(hostname, 255) == 0) {
27084 char discoveryUrl[256];
27086 du.
length = (size_t)snprintf(discoveryUrl, 255,
"opc.tcp://%s:%d",
27087 hostname, layer->
port);
27089 du.
length = (size_t)_snprintf_s(discoveryUrl, 255, _TRUNCATE,
27090 "opc.tcp://%s:%d", hostname, layer->
port);
27097 SOCKET newsock = socket(PF_INET, SOCK_STREAM, 0);
27099 if(newsock == INVALID_SOCKET)
27105 "Error opening the server socket");
27111 if(setsockopt(newsock, SOL_SOCKET, SO_REUSEADDR,
27112 (
const char *)&optval,
sizeof(optval)) == -1 ||
27115 "Error during setting of server socket options");
27121 const struct sockaddr_in serv_addr = {
27122 .sin_family = AF_INET, .sin_addr.s_addr = INADDR_ANY,
27123 .sin_port = htons(layer->
port), .sin_zero = {0}};
27124 if(bind(newsock, (
const struct sockaddr *)&serv_addr,
sizeof(serv_addr)) < 0) {
27126 "Error during binding of the server socket");
27134 "Error listening on server socket");
27141 "TCP network layer listening on %.*s",
27155 js[c].
type = UA_JOBTYPE_DETACHCONNECTION;
27160 js[c].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27178 size_t totalJobs = removeClosedConnections(layer, js);
27181 fd_set fdset, errset;
27182 UA_Int32 highestfd = setFDSet(layer, &fdset);
27183 setFDSet(layer, &errset);
27184 struct timeval tmptv = {0, timeout * 1000};
27185 UA_Int32 resultsize = select(highestfd+1, &fdset,
NULL, &errset, &tmptv);
27186 if(totalJobs == 0 && resultsize <= 0) {
27197 if(newsockfd != INVALID_SOCKET)
27202 socket_set_nonblocking(newsockfd);
27205 setsockopt(newsockfd, IPPROTO_TCP, TCP_NODELAY, (
void *)&i,
sizeof(i));
27206 ServerNetworkLayerTCP_add(layer, (
UA_Int32)newsockfd);
27213 for(
size_t i = 0; i < layer->
mappingsSize && j < (size_t)resultsize; ++i) {
27222 js[totalJobs + j].
type = UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER;
27227 "Connection %i | Connection closed from remote", c->
sockfd);
27229 js[totalJobs + j].
type = UA_JOBTYPE_DETACHCONNECTION;
27234 js[totalJobs + j].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27235 js[totalJobs + j].
job.
methodCall.method = FreeConnectionCallback;
27242 if(totalJobs == 0) {
27254 "Shutting down the TCP network layer with %d open connection(s)",
27263 items[i*2].
type = UA_JOBTYPE_DETACHCONNECTION;
27265 items[(i*2)+1].type = UA_JOBTYPE_METHODCALL_DELAYED;
27266 items[(i*2)+1].job.
methodCall.method = FreeConnectionCallback;
27287 WORD wVersionRequested;
27289 wVersionRequested = MAKEWORD(2, 2);
27290 WSAStartup(wVersionRequested, &wsaData);
27299 layer->
conf = conf;
27300 layer->
port = port;
27303 nl.
start = ServerNetworkLayerTCP_start;
27304 nl.
getJobs = ServerNetworkLayerTCP_getJobs;
27305 nl.
stop = ServerNetworkLayerTCP_stop;
27315 ClientNetworkLayerGetBuffer(
UA_Connection *connection,
size_t length,
27326 UA_ByteString_deleteMembers(buf);
27331 #ifdef UA_ENABLE_MULTITHREADING 27339 socket_close(connection);
27347 WORD wVersionRequested;
27349 wVersionRequested = MAKEWORD(2, 2);
27350 WSAStartup(wVersionRequested, &wsaData);
27358 connection.
send = socket_write;
27359 connection.
recv = socket_recv;
27360 connection.
close = ClientNetworkLayerClose;
27365 char hostname[512];
27367 const char *path =
NULL;
27373 "Server url is invalid: %s", endpointUrl);
27376 "Server url does not begin with 'opc.tcp://' '%s'",
27384 "No port defined, using standard port %d", port);
27387 struct addrinfo hints, *server;
27388 memset(&hints, 0,
sizeof(hints));
27389 hints.ai_socktype = SOCK_STREAM;
27390 hints.ai_family = AF_INET;
27393 snprintf(portStr, 6,
"%d", port);
27395 _snprintf_s(portStr, 6, _TRUNCATE,
"%d", port);
27397 int error = getaddrinfo(hostname, portStr, &hints, &server);
27398 if(error != 0 || !server) {
27400 "DNS lookup of %s failed with error %s",
27401 hostname, gai_strerror(error));
27406 SOCKET clientsockfd = socket(server->ai_family, server->ai_socktype,
27407 server->ai_protocol);
27409 if(clientsockfd == INVALID_SOCKET) {
27411 if(clientsockfd < 0) {
27414 "Could not create client socket");
27415 freeaddrinfo(server);
27421 error = connect(clientsockfd, server->ai_addr,
WIN32_INT server->ai_addrlen);
27422 freeaddrinfo(server);
27424 ClientNetworkLayerClose(&connection);
27427 FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
27428 FORMAT_MESSAGE_FROM_SYSTEM |
27429 FORMAT_MESSAGE_IGNORE_INSERTS,
27430 NULL, WSAGetLastError(),
27431 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
27432 (LPWSTR)&s, 0,
NULL);
27434 "Connection to %s failed. Error: %d: %S",
27435 endpointUrl, WSAGetLastError(), s);
27439 "Connection to %s failed. Error: %d: %s",
27440 endpointUrl, errno, strerror(errno));
27445 #ifdef SO_NOSIGPIPE 27447 int sso_result = setsockopt(connection.
sockfd,
27448 SOL_SOCKET, SO_NOSIGPIPE,
27449 (
void*)&val,
sizeof(val));
27452 "Couldn't set SO_NOSIGPIPE");
27466 # ifdef SLIST_ENTRY 27467 # undef SLIST_ENTRY 27469 # include <windows.h> 27471 # include <sys/time.h> 27474 #if defined(__APPLE__) || defined(__MACH__) 27475 # include <mach/clock.h> 27476 # include <mach/mach.h> 27480 #if defined(_WIN32) 27484 GetSystemTime(&st);
27485 SystemTimeToFileTime(&st, &ft);
27487 ul.LowPart = ft.dwLowDateTime;
27488 ul.HighPart = ft.dwHighDateTime;
27492 gettimeofday(&tv,
NULL);
27498 #if defined(_WIN32) 27499 LARGE_INTEGER freq, ticks;
27500 QueryPerformanceFrequency(&freq);
27501 QueryPerformanceCounter(&ticks);
27504 #elif defined(__APPLE__) || defined(__MACH__) 27506 clock_serv_t cclock;
27507 mach_timespec_t mts;
27508 host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock);
27509 clock_get_time(cclock, &mts);
27510 mach_port_deallocate(mach_task_self(), cclock);
27512 #elif !defined(CLOCK_MONOTONIC_RAW) 27513 struct timespec ts;
27514 clock_gettime(CLOCK_MONOTONIC, &ts);
27517 struct timespec ts;
27518 clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
27529 #include <stdarg.h> 27531 #ifdef UA_ENABLE_MULTITHREADING 27532 #include <pthread.h> 27533 static pthread_mutex_t printf_mutex = PTHREAD_MUTEX_INITIALIZER;
27536 const char *
LogLevelNames[6] = {
"trace",
"debug",
"info",
"warning",
"error",
"fatal"};
27537 const char *
LogCategoryNames[6] = {
"network",
"channel",
"session",
"server",
"client",
"userland"};
27539 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27541 # pragma GCC diagnostic push 27542 # pragma GCC diagnostic ignored "-Wformat-nonliteral" 27547 const char *msg, va_list args) {
27549 #ifdef UA_ENABLE_MULTITHREADING 27550 pthread_mutex_lock(&printf_mutex);
27552 printf(
"[%.23s] %s/%s\t", t.
data, LogLevelNames[level], LogCategoryNames[category]);
27553 vprintf(msg, args);
27556 #ifdef UA_ENABLE_MULTITHREADING 27557 pthread_mutex_unlock(&printf_mutex);
27559 UA_ByteString_deleteMembers(&t);
27562 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27564 # pragma GCC diagnostic pop 27579 .sendBufferSize = 65535,
27580 .recvBufferSize = 65535,
27581 .maxMessageSize = 0,
27589 #define MANUFACTURER_NAME "open62541" 27590 #define PRODUCT_NAME "open62541 OPC UA Server" 27591 #define PRODUCT_URI "http://open62541.org" 27592 #define APPLICATION_NAME "open62541-based OPC UA Application" 27593 #define APPLICATION_URI "urn:unconfigured:application" 27595 #define UA_STRING_STATIC(s) {sizeof(s)-1, (UA_Byte*)s} 27596 #define UA_STRING_STATIC_NULL {0, NULL} 27598 #define STRINGIFY(arg) #arg 27599 #define VERSION(MAJOR, MINOR, PATCH, LABEL) \ 27600 STRINGIFY(MAJOR) "." STRINGIFY(MINOR) "." STRINGIFY(PATCH) LABEL 27621 .applicationDescription = {
27629 .discoveryUrlsSize = 0,
27630 .discoveryUrls =
NULL },
27634 .networkLayersSize = 0,
27635 .networkLayers =
NULL,
27638 .enableAnonymousLogin =
true,
27639 .enableUsernamePasswordLogin =
true,
27641 .usernamePasswordLoginsSize = 2,
27644 .maxSecureChannels = 40,
27645 .maxSecurityTokenLifetime = 10 * 60 * 1000,
27648 .maxSessions = 100,
27649 .maxSessionTimeout = 60.0 * 60.0 * 1000.0,
27652 .publishingIntervalLimits = { .min = 100.0, .max = 3600.0 * 1000.0 },
27653 .lifeTimeCountLimits = { .max = 15000, .min = 3 },
27654 .keepAliveCountLimits = { .max = 100, .min = 1 },
27655 .maxNotificationsPerPublish = 1000,
27656 .maxRetransmissionQueueSize = 0,
27659 .samplingIntervalLimits = { .min = 50.0, .max = 24.0 * 3600.0 * 1000.0 },
27660 .queueSizeLimits = { .max = 100, .min = 1 }
27669 .secureChannelLifeTime = 10 * 60 * 1000,
27671 .localConnectionConfig = {
27672 .protocolVersion = 0,
27673 .sendBufferSize = 65535,
27674 .recvBufferSize = 65535,
27675 .maxMessageSize = 0,
27684 #ifdef UA_ENABLE_SUBSCRIPTIONS 27686 const UA_SubscriptionSettings UA_SubscriptionSettings_standard = {
27687 .requestedPublishingInterval = 500.0,
27688 .requestedLifetimeCount = 10000,
27689 .requestedMaxKeepAliveCount = 1,
27690 .maxNotificationsPerPublish = 10,
27691 .publishingEnabled =
true,
UA_EndpointDescription * serverEndpoints
UA_SecureChannel * channel
#define UA_NS0ID_BROWSENEXTREQUEST_ENCODING_DEFAULTBINARY
#define LIST_HEAD(name, type)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXQUERYCONTINUATIONPOINTS
#define UA_NS0ID_UNREGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId, const UA_NodeId refTypeId, const UA_ExpandedNodeId targetId, UA_Boolean isForward)
void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session, const UA_TranslateBrowsePathsToNodeIdsRequest *request, UA_TranslateBrowsePathsToNodeIdsResponse *response)
UA_StatusCode UA_Client_connect_username(UA_Client *client, const char *endpointUrl, const char *username, const char *password)
size_t subscriptionIdsSize
UA_ResponseHeader responseHeader
UA_NodeId authenticationToken
#define UA_NS0ID_SERVERTYPE
#define UA_STATUSCODE_BADSHELVINGTIMEOUTOFRANGE
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_MODIFYMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode(* recv)(UA_Connection *connection, UA_ByteString *response, UA_UInt32 timeout)
size_t continuationPointsSize
#define UA_TYPES_SETMONITORINGMODERESPONSE
UA_VariantStorageType storageType
UA_SecureChannelManager secureChannelManager
void UA_Variant_setScalar(UA_Variant *v, void *UA_RESTRICT p, const UA_DataType *type)
#define UA_STATUSCODE_BADDEADBANDFILTERINVALID
#define UA_STATUSCODE_UNCERTAININITIALVALUE
#define UA_EXPORT
Function Export On Win32: Define UA_DYNAMIC_LINKING and UA_DYNAMIC_LINKING_EXPORT in order to export ...
#define UA_NodeStore_newVariableTypeNode()
#define UA_STATUSCODE_BADVIEWPARAMETERMISMATCH
#define UA_NS0ID_ENUMERATION
struct UA_ExtensionObject::@1::@2 encoded
uint32_t UA_UInt32
UInt32 ^^^^^^ An integer value between 0 and 4 294 967 295.
#define UA_TYPES_METHODATTRIBUTES
#define UA_BINARY_OVERLAYABLE_INTEGER
String Manipulation The header string.h is defined in the C-standard.
#define UA_STATUSCODE_BADDEVICEFAILURE
#define UA_NS0ID_FROMSTATE
void UA_SecureChannel_revolveTokens(UA_SecureChannel *channel)
#define UA_NS0ID_SERVERSTATUSDATATYPE
#define UA_TYPES_SIGNATUREDATA
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINSUFFICIENTCLIENTPROFILE
UA_QualifiedName targetName
#define UA_STATUSCODE_BADEVENTFILTERINVALID
#define UA_NS0ID_BUILDINFO
#define container_of(ptr, type, member)
UA_StatusCode UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
ApplicationDescription ^^^^^^^^^^^^^^^^^^^^^^ Describes an application and how to find it...
#define UA_NS0ID_SERVER_VENDORSERVERINFO
void Service_DeleteNodes(UA_Server *server, UA_Session *session, const UA_DeleteNodesRequest *request, UA_DeleteNodesResponse *response)
UA_NodeId referenceTypeId
UA_BrowsePathResult UA_Server_translateBrowsePathToNodeIds(UA_Server *server, const UA_BrowsePath *browsePath)
#define UA_NS0ID_FINDSERVERSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_QUERYDATASET
#define UA_OPEN62541_VER_LABEL
#define UA_STATUSCODE_BADSERVERNOTCONNECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME
#define UA_NS0ID_ORGANIZES
#define UA_STATUSCODE_UNCERTAINDATASUBNORMAL
UA_ApplicationType
ApplicationType ^^^^^^^^^^^^^^^ The types of applications.
const UA_EXPORT UA_ConnectionConfig UA_ConnectionConfig_standard
UA_StatusCode UA_NodeStore_remove(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_MonitoredItemNotification * monitoredItems
#define UA_STATUSCODE_GOODDATAIGNORED
#define UA_STATUSCODE_BADENCODINGERROR
#define UA_TYPES_DELETEMONITOREDITEMSREQUEST
#define UA_TYPES_SETPUBLISHINGMODEREQUEST
void UA_Subscription_publishCallback(UA_Server *server, UA_Subscription *sub)
#define UA_TYPES_MODIFYMONITOREDITEMSREQUEST
#define UA_STATUSCODE_BADCERTIFICATEINVALID
UA_ByteString incompleteMessage
#define UA_TYPES_DELETEREFERENCESITEM
void(* UA_Service)(UA_Server *, UA_Session *, const void *request, void *response)
UA_StatusCode innerStatusCode
UA_NodeStore * UA_NodeStore_new(void)
Nodestore Lifecycle ^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_SIGNEDSOFTWARECERTIFICATE
#define LIST_NEXT(elm, field)
UA_AddNodesItem * nodesToAdd
UA_MonitoredItem * UA_MonitoredItem_new(void)
UA_Boolean UA_Guid_equal(const UA_Guid *g1, const UA_Guid *g2)
AddReferencesItem ^^^^^^^^^^^^^^^^^ A request to add a reference to the server address space...
UA_StatusCode UA_SecureChannelManager_close(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_TYPES_READVALUEID
#define UA_TYPES_BROWSEPATH
UA_Boolean containsNoLoops
UA_ByteString serverCertificate
void UA_Client_reset(UA_Client *client)
#define UA_NS0ID_REFERENCETYPESFOLDER
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
RelativePath ^^^^^^^^^^^^ A relative path constructed from reference types and browse names...
TranslateBrowsePathsToNodeIdsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more path...
UA_QualifiedName browseName
#define UA_STATUSCODE_BADCONDITIONALREADYDISABLED
struct UA_NodeStoreEntry * orig
UA_DeleteNodesItem * nodesToDelete
#define UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED
#define UA_STATUSCODE_UNCERTAINREFERENCENOTDELETED
UA_String UA_ByteString
ByteString ^^^^^^^^^^ A sequence of octets.
#define UA_STATUSCODE_BADINDEXRANGEINVALID
#define UA_NS0ID_QUALIFIEDNAME
UA_StatusCode UA_Client_manuallyRenewSecureChannel(UA_Client *client)
UA_UInt32 * subscriptionIds
UA_StatusCode Subscription_unregisterPublishJob(UA_Server *server, UA_Subscription *sub)
#define UA_STATUSCODE_BADCERTIFICATEUNTRUSTED
void(* UA_deleteMembersSignature)(void *p, const UA_DataType *type)
CreateSessionRequest ^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
UA_String securityPolicyUri
void UA_Server_deleteAllRepeatedJobs(UA_Server *server)
#define UA_NS0ID_OBJECTSFOLDER
#define MAXBACKLOG
For the multithreaded mode, assume a single thread that periodically "gets work" from the network lay...
struct UA_ExtensionObject::@1::@3 decoded
#define UA_STATUSCODE_BADCONTINUATIONPOINTINVALID
QueryFirstRequest ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION
UA_StatusCode UA_Server_editNode(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId, UA_EditNodeCallback callback, const void *data)
#define UA_TYPES_GUID
Guid ^^^^.
#define UA_STATUSCODE_BADCONDITIONDISABLED
FindServersRequest ^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
#define UA_NS0ID_TRANSLATEBROWSEPATHSTONODEIDSREQUEST_ENCODING_DEFAULTBINARY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADOUTOFSERVICE
#define TAILQ_REMOVE(head, elm, field)
AddNodesItem ^^^^^^^^^^^^ A request to add a node to the server address space.
#define UA_STATUSCODE_BADCONNECTIONREJECTED
struct ServerNetworkLayerTCP::ConnectionMapping * mappings
UA_ExtensionObjectEncoding encoding
UA_ByteString continuationPoint
void UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection, const UA_ByteString *message)
#define UA_NodeStore_newObjectTypeNode()
#define CHECK_NODECLASS(CLASS)
CreateMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_Job::@5::@6 binaryMessage
#define TAILQ_FOREACH(var, head, field)
UA_StatusCode UA_Client_NamespaceGetIndex(UA_Client *client, UA_String *namespaceUri, UA_UInt16 *namespaceIndex)
#define CHECK_DATATYPE_ARRAY(EXP_DT)
ServiceFault ^^^^^^^^^^^^ The response returned by all services when there is a service level error...
#define UA_NS0ID_CREATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE
#define UA_STATUSCODE_BADDISCONNECT
#define UA_NS0ID_VARIABLETYPESFOLDER
UA_StatusCode UA_SecureChannel_processChunks(UA_SecureChannel *channel, const UA_ByteString *chunks, UA_ProcessMessageCallback callback, void *application)
#define UA_TYPES_WRITEREQUEST
UA_CallMethodResult UA_EXPORT UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request)
Method Call
#define UA_STATUSCODE_BADINTERNALERROR
UA_MonitoringMode
MonitoringMode ^^^^^^^^^^^^^^.
CreateSubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_MonitoredItem UA_MonitoredItem
UA_ChannelSecurityToken securityToken
#define UA_TYPES_ACTIVATESESSIONREQUEST
#define UA_TYPES_GETENDPOINTSREQUEST
bool UA_Boolean
Boolean ^^^^^^^ A two-state logical value (true or false).
#define UA_TYPES_DATAVALUE
DataValue ^^^^^^^^^.
void UA_Client_delete(UA_Client *client)
#define UA_NS0ID_BASEDATATYPE
#define UA_STATUSCODE_UNCERTAINREFERENCEOUTOFSERVER
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_INT16
Int16 ^^^^^.
#define SIMPLEQ_ENTRY(type)
#define UA_TRANSPORT_TCPHELLOMESSAGE
UA_DateTime UA_DateTime_now(void)
DataTypeAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a data type node.
#define UA_INLINE
Inline Functions
UA_UInt32 revisedLifetime
TcpAcknowledgeMessage ^^^^^^^^^^^^^^^^^^^^^ Acknowledge Message.
UA_StatusCode UA_SessionManager_createSession(UA_SessionManager *sm, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_Session **session)
UA_StatusCode UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_VariableAttributes attr, const UA_DataSource dataSource, UA_NodeId *outNewNodeId)
UA_StatusCode UA_Client_connect(UA_Client *client, const char *endpointUrl)
UA_StatusCode UA_Client_disconnect(UA_Client *client)
const UA_ExpandedNodeId UA_EXPANDEDNODEID_NULL
#define UA_TYPES_PUBLISHREQUEST
struct MonitoredItem_queuedValue MonitoredItem_queuedValue
const UA_DataType * responseType
UA_RelativePathElement * elements
QueryNextRequest ^^^^^^^^^^^^^^^^.
UA_StatusCode UA_Client_forEachChildNodeCall(UA_Client *client, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
#define UA_STATUSCODE_BADNODEIDUNKNOWN
#define UA_TYPES_OPENSECURECHANNELREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS_STATE
#define UA_STATUSCODE_BADWOULDBLOCK
UA_StatusCode UA_NodeStore_insert(UA_NodeStore *ns, UA_Node *node)
Insert / Get / Replace / Remove ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_HASENCODING
#define UA_NS0ID_NONHIERARCHICALREFERENCES
SignatureData ^^^^^^^^^^^^^ A digital signature.
#define UA_TYPES_CLOSESECURECHANNELRESPONSE
DeleteSubscriptionsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADINDEXRANGENODATA
UA_Node * UA_NodeStore_getCopy(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_Double revisedSessionTimeout
#define UA_STATUSCODE_GOODENTRYREPLACED
size_t UA_readNumber(UA_Byte *buf, size_t buflen, UA_UInt32 *number)
size_t subscriptionIdsSize
UA_UserTokenType tokenType
#define UA_TYPES_WRITERESPONSE
#define UA_STATUSCODE_BADMONITOREDITEMFILTERINVALID
double UA_Double
Double ^^^^^^ An IEEE double precision (64 bit) floating point value.
MonitoredItemModifyResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG,...)
#define SLIST_FOREACH_SAFE(var, head, field, tvar)
UA_MonitoredItemCreateResult * results
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADSTATENOTACTIVE
#define UA_STATUSCODE_BADTARGETNODEIDINVALID
#define SLIST_REMOVE(head, elm, type, field)
#define UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADDIALOGNOTACTIVE
#define UA_NS0ID_HASMODELLINGRULE
UA_StatusCode __UA_Server_read(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, void *v)
#define UA_NS0ID_SERVER_AUDITING
#define UA_STATUSCODE_BADBROWSENAMEDUPLICATED
#define UA_TYPES_SUBSCRIPTIONACKNOWLEDGEMENT
ReferenceDescription ^^^^^^^^^^^^^^^^^^^^ The description of a reference.
UA_UInt16 sourcePicoseconds
#define UA_TYPES_USERIDENTITYTOKEN
#define UA_STATUSCODE_BADINVALIDSELFREFERENCE
#define UA_STATUSCODE_GOODMOREDATA
#define SLIST_ENTRY(type)
UA_ResponseHeader responseHeader
UA_String transportProfileUri
#define UA_STATUSCODE_BADTOOMANYMATCHES
#define UA_NS0ID_SERVER_SERVERREDUNDANCY
void Service_UnregisterNodes(UA_Server *server, UA_Session *session, const UA_UnregisterNodesRequest *request, UA_UnregisterNodesResponse *response)
#define UA_TYPES_INT32
Int32 ^^^^^.
#define UA_NodeStore_newReferenceTypeNode()
#define UA_STATUSCODE_BADRESPONSETOOLARGE
#define UA_NS0ID_ADDREFERENCESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADUSERSIGNATUREINVALID
const UA_ObjectTypeNode * getObjectNodeType(UA_Server *server, const UA_ObjectNode *node)
BrowseNextRequest ^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
UA_ResponseHeader responseHeader
size_t UA_calcSizeBinary(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADREFERENCETYPEIDINVALID
UA_Guid UA_Guid_random(void)
UA_StatusCode MonitoredItem_registerSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOKED
#define UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID
#define SIMPLEQ_FIRST(head)
UA_BrowsePathResult * results
const UA_encodeBinarySignature encodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
UA_StatusCode getTypeHierarchy(UA_NodeStore *ns, const UA_Node *rootRef, UA_Boolean inverse, UA_NodeId **typeHierarchy, size_t *typeHierarchySize)
UA_Boolean publishingEnabled
#define UA_TYPES_COUNT
Every type is assigned an index in an array containing the type descriptions.
UA_Session * UA_SecureChannel_getSession(UA_SecureChannel *channel, UA_NodeId *token)
UA_ResponseHeader responseHeader
#define UA_OPEN62541_VER_MAJOR
Library Version
#define UA_NS0ID_HASPROPERTY
DeleteReferencesRequest ^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server address...
Argument ^^^^^^^^ An argument for a method.
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE
size_t subscriptionAcknowledgementsSize
UA_Boolean publishingEnabled
#define UA_NS0ID_HASDESCRIPTION
UA_UInt16 memberTypeIndex
UserNameIdentityToken ^^^^^^^^^^^^^^^^^^^^^ A token representing a user identified by a user name and...
UA_UInt32 * arrayDimensions
UA_StatusCode writeDataTypeAttribute(UA_Server *server, UA_VariableNode *node, const UA_NodeId *dataType, const UA_NodeId *constraintDataType)
#define UA_TYPES_CLOSESESSIONRESPONSE
#define UA_NS0ID_MODIFYSUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel, UA_Session *session, const UA_ActivateSessionRequest *request, UA_ActivateSessionResponse *response)
#define UA_STATUSCODE_BADNOCONTINUATIONPOINTS
UA_StatusCode UA_SessionManager_removeSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_HASORDEREDCOMPONENT
#define UA_TYPES_DATACHANGEFILTER
#define UA_STATUSCODE_BADTYPEMISMATCH
UA_RequestHeader requestHeader
UA_BrowseDirection browseDirection
UA_NodeId referenceTypeId
#define UA_STATUSCODE_BADTCPINTERNALERROR
#define UA_STATUSCODE_BADTCPMESSAGETOOLARGE
void * UA_Array_new(size_t size, const UA_DataType *type)
CallMethodResult ^^^^^^^^^^^^^^^^.
#define UA_TYPES_UINT32
UInt32 ^^^^^^.
UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char *name)
UA_StatusCode compatibleArrayDimensions(size_t constraintArrayDimensionsSize, const UA_UInt32 *constraintArrayDimensions, size_t testArrayDimensionsSize, const UA_UInt32 *testArrayDimensions)
TcpErrorMessage ^^^^^^^^^^^^^^^ Error Message.
#define UA_STATUSCODE_BADNOTIMPLEMENTED
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Byte accessLevel
UA_ExtensionObjectEncoding
UA_VARIANT_ENCODINGMASKTYPE
#define UA_TYPES_BYTESTRING
ByteString ^^^^^^^^^^.
SignedSoftwareCertificate ^^^^^^^^^^^^^^^^^^^^^^^^^ A software certificate with a digital signature...
#define UA_STATUSCODE_BADVIEWIDUNKNOWN
#define UA_STATUSCODE_BADNODEATTRIBUTESINVALID
#define UA_TYPES_UINT64
UInt64 ^^^^^^.
UA_LocalizedText displayName
#define UA_STATUSCODE_BADDATALOST
#define UA_STATUSCODE_BADDEPENDENTVALUECHANGED
#define UA_NS0ID_SERVER_SERVERSTATUS_SECONDSTILLSHUTDOWN
UA_Boolean UA_Node_hasSubTypeOrInstances(const UA_Node *node)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYCLIENT
#define UA_STATUSCODE_BADCERTIFICATEHOSTNAMEINVALID
#define UA_STATUSCODE_GOODCALLAGAIN
UA_UInt32 maxRequestMessageSize
UA_String UA_String_fromChars(char const src[])
#define CHECK_NODECLASS_WRITE(CLASS)
const UA_DataType * UA_findDataType(const UA_NodeId *typeId)
Builtin data types can be accessed as UA_TYPES[UA_TYPES_XXX], where XXX is the name of the data type...
#define UA_STATUSCODE_BADDATAENCODINGINVALID
UA_StatusCode UA_SecureChannel_generateNonce(UA_ByteString *nonce)
const UA_NodeId UA_NODEID_NULL
UA_ExtensionObject filter
#define UA_STATUSCODE_BADCERTIFICATECHAININCOMPLETE
#define UA_STATUSCODE_BADSESSIONIDINVALID
uint16_t UA_UInt16
UInt16 ^^^^^^ An integer value between 0 and 65 535.
#define UA_STATUSCODE_BADBROWSENAMEINVALID
#define UA_STATUSCODE_GOODNODATA
#define UA_NS0ID_UINTEGER
#define UA_NS0ID_HASCAUSE
UA_LocalizedText inverseName
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXBROWSECONTINUATIONPOINTS
#define UA_NS0ID_BASEDATAVARIABLETYPE
UA_ExtensionObject nodeAttributes
UA_Boolean hasLocalizedText
OpenSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
void Service_Read_single(UA_Server *server, UA_Session *session, UA_TimestampsToReturn timestamps, const UA_ReadValueId *id, UA_DataValue *v)
UA_ClientState UA_Client_getState(UA_Client *client)
UA_StatusCode UA_Server_delayedFree(UA_Server *server, void *data)
#define UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED
UA_Boolean hasSourcePicoseconds
struct UA_DiagnosticInfo * innerDiagnosticInfo
AddNodesRequest ^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG,...)
#define UA_TYPES_CREATESUBSCRIPTIONREQUEST
#define UA_NS0ID_VIEWSFOLDER
#define UA_TYPES_CALLMETHODRESULT
UA_AsymmetricAlgorithmSecurityHeader clientAsymAlgSettings
#define UA_TYPES_PUBLISHRESPONSE
UA_QualifiedName browseName
UA_SecurityTokenRequestType requestType
#define ADDPROFILEARRAY(x)
UA_StatusCode UA_Subscription_deleteMonitoredItem(UA_Server *server, UA_Subscription *sub, UA_UInt32 monitoredItemID)
UA_UInt32 protocolVersion
#define UA_TYPES_RELATIVEPATH
UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
#define UA_NS0ID_GENERATESEVENT
#define UA_NS0ID_GETENDPOINTSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_BROWSERESPONSE
#define UA_TYPES_FINDSERVERSRESPONSE
#define UA_STATUSCODE_BADTIMEOUT
UA_Double revisedPublishingInterval
#define UA_TYPES_MODIFYSUBSCRIPTIONREQUEST
AddNodesResponse ^^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_STATUSCODE_BADNOVALIDCERTIFICATES
#define UA_TYPES_SBYTE
SByte ^^^^^.
struct channel_list_entry channel_list_entry
#define UA_TYPES_ADDNODESITEM
void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session, const UA_DeleteMonitoredItemsRequest *request, UA_DeleteMonitoredItemsResponse *response)
SetPublishingModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
UA_NodeId referenceTypeId
const UA_Guid UA_GUID_NULL
#define UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED
UA_String * discoveryUrls
#define UA_TYPES_DELETENODESRESPONSE
UA_ByteString serverNonce
UA_BrowseResult UA_Server_browse(UA_Server *server, UA_UInt32 maxrefs, const UA_BrowseDescription *descr)
Browsing
UA_Double requestedPublishingInterval
#define TAILQ_LAST(head, headname)
UA_StatusCode readValueAttribute(UA_Server *server, const UA_VariableNode *vn, UA_DataValue *v)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYREQUEST
void UA_NodeStore_deleteNode(UA_Node *node)
#define UA_NS0ID_SERVERCAPABILITIESTYPE
RegisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a ses...
UA_ResponseHeader responseHeader
UA_MonitoredItemModifyResult * results
size_t registeredNodeIdsSize
DeleteMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_StatusCode writeValueAttribute(UA_Server *server, UA_VariableNode *node, const UA_DataValue *value, const UA_String *indexRange)
#define UA_TYPES_CONTENTFILTER
#define UA_TRANSPORT_MESSAGETYPE
UA_UInt32 secondsTillShutdown
#define UA_NS0ID_PUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_ARGUMENT
#define TAILQ_INSERT_HEAD(head, elm, field)
void UA_Array_delete(void *p, size_t size, const UA_DataType *type)
#define UA_STATUSCODE_BADNOTCONNECTED
#define UA_TYPES_ADDREFERENCESITEM
#define UA_STATUSCODE_BADSERVERHALTED
ContentFilterResult ^^^^^^^^^^^^^^^^^^^.
ReferenceNode ^^^^^^^^^^^^^ Specifies a reference which belongs to a node.
#define UA_TYPES_MESSAGESECURITYMODE
UA_DataChangeTrigger trigger
UA_EndpointDescription * endpoints
UA_ByteString clientNonce
UA_AddReferencesItem * referencesToAdd
#define UA_STATUSCODE_BADREQUESTTIMEOUT
UA_Boolean includeSubtypes
#define UA_NS0ID_HASCOMPONENT
#define UA_STATUSCODE_BADOUTOFRANGE
#define UA_STATUSCODE_BADQUERYTOOCOMPLEX
UA_UInt32 retransmitSequenceNumber
UA_ExpandedNodeId typeDefinition
#define UA_STATUSCODE_BADHISTORYOPERATIONINVALID
UA_StatusCode Subscription_registerPublishJob(UA_Server *server, UA_Subscription *sub)
UA_MonitoringParameters requestedParameters
GetEndpointsResponse ^^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
#define UA_STATUSCODE_BADREFRESHINPROGRESS
UA_ApplicationDescription * servers
#define UA_TYPES_ADDNODESREQUEST
UA_ChannelSecurityToken securityToken
#define UA_TYPES_CREATESESSIONRESPONSE
CallResponse ^^^^^^^^^^^^.
uint64_t UA_UInt64
UInt64 ^^^^^^ An integer value between 0 and 18 446 744 073 709 551 615.
#define UA_TYPES_DELETEREFERENCESRESPONSE
#define UA_STATUSCODE_BADFILTERELEMENTINVALID
#define UA_NODEIDTYPE_NUMERIC_TWOBYTE
#define TAILQ_ENTRY(type)
UA_StatusCode UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId, const UA_DataSource dataSource)
#define UA_STATUSCODE_BADDIALOGRESPONSEINVALID
UA_StatusCode(* UA_exchangeEncodeBuffer)(void *handle, UA_ByteString *buf, size_t offset)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI
SecureConversationMessageAbortBody ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Secure Conversation Message Abo...
SetMonitoringModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
void() UA_ProcessMessageCallback(void *application, UA_SecureChannel *channel, UA_MessageType messageType, UA_UInt32 requestId, const UA_ByteString *message)
Chunking
#define UA_STATUSCODE_BADMONITOREDITEMIDINVALID
#define UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED
#define UA_TYPES_FLOAT
Float ^^^^^.
#define UA_STATUSCODE_BADTOOMANYSESSIONS
#define UA_STATUSCODE_BADIDENTITYCHANGENOTSUPPORTED
UA_Double revisedPublishingInterval
UA_Boolean containsNoLoops
void Service_OpenSecureChannel(UA_Server *server, UA_Connection *connection, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
SecureChannel Service Set This Service Set defines Services used to open a communication channel that...
#define UA_TYPES_REPUBLISHRESPONSE
UA_Boolean deleteBidirectional
UA_DateTime sourceTimestamp
size_t(* getJobs)(UA_ServerNetworkLayer *nl, UA_Job **jobs, UA_UInt16 timeout)
UA_DateTime nextChannelRenewal
#define UA_TYPES_MONITOREDITEMMODIFYREQUEST
UA_NodeId authenticationToken
#define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG,...)
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_OUTPUTARGUMENTS
void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server *server)
#define UA_STATUSCODE_GOODNONCRITICALTIMEOUT
DeleteNodesRequest ^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_TYPES_READRESPONSE
#define UA_STATUSCODE_BADNOTSUPPORTED
ContentFilter ^^^^^^^^^^^^^.
UA_Variant * inputArguments
UA_Server * UA_Server_new(const UA_ServerConfig config)
#define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG,...)
SetPublishingModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
status(* UA_decodeBinarySignature)(void *UA_RESTRICT dst, const UA_DataType *type)
UA_MessageSecurityMode securityMode
#define UA_NODESTORE_TOMBSTONE
#define UA_STATUSCODE_BADNODEIDEXISTS
size_t userIdentityTokensSize
#define UA_TYPES_MONITOREDITEMCREATEREQUEST
#define UA_STATUSCODE_UNCERTAINSENSORNOTACCURATE
const UA_decodeBinarySignature decodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NS0ID_WRITEREQUEST_ENCODING_DEFAULTBINARY
size_t notificationDataSize
UA_EndpointDescription * endpointDescriptions
UA_MonitoringParameters requestedParameters
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINVALIDTIMESTAMPARGUMENT
UA_StatusCode UA_Client_writeArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, const UA_UInt32 *newArrayDimensions, size_t newArrayDimensionsSize)
UA_ResponseHeader responseHeader
QueryDataSet ^^^^^^^^^^^^.
#define UA_TYPES_READREQUEST
void UA_NodeStore_iterate(UA_NodeStore *ns, UA_NodeStore_nodeVisitor visitor)
const UA_EXPORT UA_ClientConfig UA_ClientConfig_standard
#define UA_STATUSCODE_BADAGGREGATELISTMISMATCH
#define UA_STATUSCODE_BADOPERATIONABANDONED
void UA_SecureChannel_init(UA_SecureChannel *channel)
#define UA_TYPES_USERNAMEIDENTITYTOKEN
UA_StatusCode __UA_Server_write(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, const UA_DataType *attr_type, const void *attr)
#define SLIST_INSERT_HEAD(head, elm, field)
UA_ObjectLifecycleManagement lifecycleManagement
#define UA_TYPES_BROWSEREQUEST
#define UA_STATUSCODE_BADREFERENCELOCALONLY
#define UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED
#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG
void Service_Call(UA_Server *server, UA_Session *session, const UA_CallRequest *request, UA_CallResponse *response)
void UA_SessionManager_cleanupTimedOut(UA_SessionManager *sm, UA_DateTime nowMonotonic)
UA_UInt32 requestedMaxReferencesPerNode
ReferenceTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^^ The attributes for a reference type node...
#define UA_STATUSCODE_BADTOOMANYOPERATIONS
DeleteNodesResponse ^^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_STATUSCODE_GOODDEPENDENTVALUECHANGED
UA_NodeClass targetNodeClass
UA_ExpandedNodeId typeDefinition
#define UA_NS0ID_SERVER_SERVERREDUNDANCY_REDUNDANCYSUPPORT
UA_Connection * connection
UA_ResponseHeader responseHeader
TranslateBrowsePathsToNodeIdsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more pa...
#define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG,...)
size_t nodesToRegisterSize
UA_Connection UA_ClientConnectionTCP(UA_ConnectionConfig conf, const char *endpointUrl, UA_Logger logger)
UA_Node * UA_NodeStore_newNode(UA_NodeClass nodeClass)
Node Lifecycle ^^^^^^^^^^^^^^.
#define UA_NS0ID_DATATYPESFOLDER
UA_Boolean isNodeInTree(UA_NodeStore *ns, const UA_NodeId *leafNode, const UA_NodeId *nodeToFind, const UA_NodeId *referenceTypeIds, size_t referenceTypeIdsSize)
#define UA_STATUSCODE_BADMESSAGENOTAVAILABLE
#define UA_TYPES_ADDNODESRESPONSE
void Service_Publish(UA_Server *server, UA_Session *session, const UA_PublishRequest *request, UA_UInt32 requestId)
UA_StatusCode UA_Variant_setRangeCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_NumericRange range)
#define UA_TYPES_PARSINGRESULT
#define UA_PRINTF_GUID_DATA(GUID)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MINSUPPORTEDSAMPLERATE
void UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm)
#define UA_ASSERT_RCU_UNLOCKED()
#define UA_SEC_TO_DATETIME
void(* UA_ServerCallback)(UA_Server *server, void *data)
UA_UInt32 maxResponseMessageSize
UA_StatusCode UA_Server_run_startup(UA_Server *server)
ViewDescription ^^^^^^^^^^^^^^^ The view to browse.
#define UA_NS0ID_REFERENCES
#define UA_NS0ID_DELETENODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADREQUESTINTERRUPTED
void(* UA_NodeStore_nodeVisitor)(const UA_Node *node)
Iteration ^^^^^^^^^ The following definitions are used to call a callback for every node in the nodes...
#define UA_TYPES_STRING
String ^^^^^^.
uint32_t pcg32_random_r(pcg32_random_t *rng)
RepublishResponse ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_LOCALIZEDTEXT
CreateSubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
BrowseResponse ^^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address spa...
float UA_Float
Float ^^^^^ An IEEE single precision (32 bit) floating point value.
#define UA_NS0ID_HASMODELPARENT
UA_Boolean hasServerTimestamp
UA_NodeStoreEntry ** entries
#define UA_STATUSCODE_BADNOTFOUND
UA_ResponseHeader responseHeader
UA_LocalizedText description
UA_SecureChannel * UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_STATUSCODE_BADSERVERNAMEMISSING
#define UA_STATUSCODE_BADDATAUNAVAILABLE
void Service_Browse(UA_Server *server, UA_Session *session, const UA_BrowseRequest *request, UA_BrowseResponse *response)
UA_Session * UA_SessionManager_getSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_XMLELEMENT
void __UA_Client_Service(UA_Client *client, const void *request, const UA_DataType *requestType, void *response, const UA_DataType *responseType)
UA_StatusCode UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *dst, const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_String UA_DateTime_toString(UA_DateTime t)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER
#define UA_NS0ID_SERVERDIAGNOSTICSTYPE
#define UA_NS0ID_DELETEREFERENCESREQUEST_ENCODING_DEFAULTBINARY
UA_UInt32 requestedLifetimeCount
void MonitoredItem_delete(UA_Server *server, UA_MonitoredItem *monitoredItem)
#define UA_TYPES_BROWSENEXTREQUEST
UA_Connection * connection
#define VERSION(MAJOR, MINOR, PATCH, LABEL)
void UA_Log_Stdout(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
UA_ResponseHeader responseHeader
UA_MessageSecurityMode securityMode
void UA_Connection_deleteMembers(UA_Connection *connection)
UA_StatusCode UA_EndpointUrl_split_ptr(const char *endpointUrl, char *hostname, const char **port, const char **path)
void Service_CreateSubscription(UA_Server *server, UA_Session *session, const UA_CreateSubscriptionRequest *request, UA_CreateSubscriptionResponse *response)
Subscription Service Set Subscriptions are used to report Notifications to the Client.
#define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG,...)
Log Helper
#define UA_STATUSCODE_BADEXPECTEDSTREAMTOBLOCK
#define UA_STATUSCODE_BADSTRUCTUREMISSING
UA_StatusCode __UA_Client_writeAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, const void *in, const UA_DataType *inDataType)
#define UA_NS0ID_HASEFFECT
void Service_CreateMonitoredItems(UA_Server *server, UA_Session *session, const UA_CreateMonitoredItemsRequest *request, UA_CreateMonitoredItemsResponse *response)
MonitoredItem Service Set Clients define MonitoredItems to subscribe to data and Events.
UA_DeleteReferencesItem * referencesToDelete
void Service_Read(UA_Server *server, UA_Session *session, const UA_ReadRequest *request, UA_ReadResponse *response)
Query Service Set This Service Set is used to issue a Query to a Server.
#define UA_TYPES_WRITEVALUE
#define UA_SECURE_MESSAGE_HEADER_LENGTH
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE
ObjectTypeAttributes ^^^^^^^^^^^^^^^^^^^^ The attributes for an object type node. ...
UA_ExtensionObject userIdentityToken
UA_StatusCode UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
UA_Boolean UA_String_equal(const UA_String *s1, const UA_String *s2)
UserTokenPolicy ^^^^^^^^^^^^^^^ Describes a user token that can be used with a server.
UA_ResponseHeader responseHeader
UA_Boolean hasInnerDiagnosticInfo
#define UA_STATUSCODE_BADENTRYEXISTS
#define CHECK_DATATYPE_SCALAR(EXP_DT)
#define UA_STATUSCODE_BADVIEWVERSIONINVALID
struct UA_DelayedJob UA_DelayedJob
#define UA_NS0ID_HASSUBTYPE
UA_BrowseResultMask
BrowseResultMask ^^^^^^^^^^^^^^^^ A bit mask which specifies what should be returned in a browse resp...
#define UA_TYPES_USERTOKENTYPE
UA_RequestHeader requestHeader
#define UA_TYPES_ADDREFERENCESRESPONSE
UA_UInt32 revisedMaxKeepAliveCount
void(* deleteMembers)(UA_ServerNetworkLayer *nl)
Deletes the network content.
UA_StatusCode UA_Client_readArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, UA_UInt32 **outArrayDimensions, size_t *outArrayDimensionsSize)
UA_ValueSource
VariableNode
#define UA_TYPES_CLOSESESSIONREQUEST
#define UA_TYPES_DELETESUBSCRIPTIONSRESPONSE
UA_UInt32 protocolVersion
UA_ResponseHeader responseHeader
void Service_Call_single(UA_Server *server, UA_Session *session, const UA_CallMethodRequest *request, UA_CallMethodResult *result)
UA_UInt16 UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal)
#define UA_NS0ID_ADDNODESREQUEST_ENCODING_DEFAULTBINARY
void * UA_new(const UA_DataType *type)
The following functions are used for generic handling of data types.
UA_UInt32 requestedMaxKeepAliveCount
#define UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN
#define UA_STATUSCODE_BADSERVERURIINVALID
#define UA_NS0ID_DATAVALUE
FindServersResponse ^^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
UA_StatusCode UA_Server_setVariableNode_valueCallback(UA_Server *server, const UA_NodeId nodeId, const UA_ValueCallback callback)
#define UA_STATUSCODE_BADNODENOTINVIEW
UA_StatusCode __UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_InstantiationCallback *instantiationCallback, UA_NodeId *outNewNodeId)
size_t outputArgumentsSize
CloseSessionResponse ^^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_TYPES_FINDSERVERSREQUEST
UA_StatusCode UA_Server_run(UA_Server *server, volatile UA_Boolean *running)
#define MANUFACTURER_NAME
UA_UInt32 maxResponseMessageSize
UA_DateTime serverTimestamp
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
UA_String UA_XmlElement
XmlElement ^^^^^^^^^^ An XML element.
NodeAttributes ^^^^^^^^^^^^^^ The base attributes for all nodes.
NotificationMessage ^^^^^^^^^^^^^^^^^^^.
UA_ExpandedNodeId parentNodeId
#define UA_TYPES_REPUBLISHREQUEST
#define UA_STATUSCODE_BADSECURECHANNELIDINVALID
UA_NodeId referenceTypeId
#define UA_USEC_TO_DATETIME
#define UA_NS0ID_PROPERTYTYPE
UA_UInt16 availableContinuationPoints
void Service_CloseSession(UA_Server *server, UA_Session *session, const UA_CloseSessionRequest *request, UA_CloseSessionResponse *response)
#define UA_TYPES_BROWSEPATHRESULT
#define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER
#define UA_NS0ID_HASTYPEDEFINITION
#define UA_MINMESSAGESIZE
#define UA_PRINTF_STRING_DATA(STRING)
#define UA_NS0ID_HIERARCHICALREFERENCES
UA_UInt32 revisedLifetimeCount
UA_BrowsePathTarget * targets
Networking Client-server connection is represented by a UA_Connection structure.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO
#define UA_NS0ID_TYPESFOLDER
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS_ENABLEDFLAG
UA_UInt32 * monitoredItemIds
UA_WriteValue * nodesToWrite
#define UA_TYPES_DELETENODESITEM
UA_DataValue UA_Server_read(UA_Server *server, const UA_ReadValueId *item, UA_TimestampsToReturn timestamps)
Reading and Writing Node Attributes The functions for reading and writing node attributes call the re...
#define UA_STATUSCODE_BADTOOMANYARGUMENTS
#define UA_NS0ID_CREATESUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
DataChangeFilter ^^^^^^^^^^^^^^^^.
UA_MonitoredItemCreateRequest * itemsToCreate
#define UA_STATUSCODE_BADBOUNDNOTFOUND
MethodAttributes ^^^^^^^^^^^^^^^^ The attributes for a method node.
UnregisterNodesRequest ^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
#define UA_NS0ID_BYTESTRING
#define UA_STATUSCODE_BADNOCOMMUNICATION
#define UA_TYPES_SERVERSTATUSDATATYPE
#define UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID
#define UA_TYPES_DATACHANGENOTIFICATION
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT
#define UA_STRING_STATIC_NULL
#define UA_STATUSCODE_BADINVALIDARGUMENT
void Service_SetMonitoringMode(UA_Server *server, UA_Session *session, const UA_SetMonitoringModeRequest *request, UA_SetMonitoringModeResponse *response)
void Service_FindServers(UA_Server *server, UA_Session *session, const UA_FindServersRequest *request, UA_FindServersResponse *response)
Discovery Service Set This Service Set defines Services used to discover the Endpoints implemented by...
#define UA_STATUSCODE_GOODPOSTACTIONFAILED
#define UA_STATUSCODE_UNCERTAINSUBNORMAL
UA_StatusCode(* start)(UA_ServerNetworkLayer *nl, UA_Logger logger)
#define UA_fd_isset(fd, fds)
UA_NumericRangeDimension * dimensions
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOODCOMMUNICATIONEVENT
const UA_calcSizeBinarySignature calcSizeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NODESTORE_MINSIZE
#define UA_STATUSCODE_BADOBJECTDELETED
UA_Boolean hasNamespaceUri
#define UA_STATUSCODE_BADTCPENDPOINTURLINVALID
union UA_ExtensionObject::@1 content
UA_ApplicationDescription server
#define UA_STATUSCODE_GOODSHUTDOWNEVENT
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE
#define UA_STATUSCODE_BADSECURITYMODEREJECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_SHUTDOWNREASON
UA_Boolean deleteTargetReferences
#define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER
UA_UInt32 protocolVersion
TcpHelloMessage ^^^^^^^^^^^^^^^ Hello Message.
#define UA_STATUSCODE_BADNODECLASSINVALID
UA_Subscription * UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptionID)
ChannelSecurityToken ^^^^^^^^^^^^^^^^^^^^ The token that identifies a set of keys for an active secur...
UA_Client_Authentication authenticationMethod
#define UA_TYPES_NODEATTRIBUTES
#define UA_TYPES_MODIFYMONITOREDITEMSRESPONSE
#define UA_TYPES_DEADBANDTYPE
Server Configuration The following structure is passed to a new server for configuration.
#define UA_TYPES_REFERENCETYPEATTRIBUTES
#define UA_STATUSCODE_BADCERTIFICATEREVOKED
#define UA_NS0ID_CREATEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADNOMATCH
#define UA_STATUSCODE_GOODEDITED
UA_AttributeId
Standard-Defined Constants This section contains numerical and string constants that are defined in t...
#define TAILQ_FIRST(head)
#define UA_TYPES_CALLREQUEST
ViewAttributes ^^^^^^^^^^^^^^ The attributes for a view node.
#define UA_ASSERT_RCU_LOCKED()
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME
enum UA_NodeIdType identifierType
#define UA_STATUSCODE_BADTOOMANYSUBSCRIPTIONS
#define UA_STATUSCODE_BADSEMPAHOREFILEMISSING
#define UA_STATUSCODE_BADDISCOVERYURLMISSING
UA_BrowseDescription * nodesToBrowse
#define UA_NS0ID_MODELLINGRULE_MANDATORY
DeleteNodesItem ^^^^^^^^^^^^^^^ A request to delete a node to the server address space.
#define UA_NodeStore_newDataTypeNode()
UA_CallMethodRequest * methodsToCall
struct UA_NodeStoreEntry UA_NodeStoreEntry
UA_MessageSecurityMode securityMode
#define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG,...)
UA_MonitoredItemModifyRequest * itemsToModify
int16_t UA_Int16
Int16 ^^^^^ An integer value between -32 768 and 32 767.
UA_StatusCode UA_EndpointUrl_split(const char *endpointUrl, char *hostname, UA_UInt16 *port, const char **path)
EndpointURL Helper ^^^^^^^^^^^^^^^^^^.
UA_Boolean includeSubtypes
#define MAXTIMEOUT
There are four types of job execution:
#define UA_TRANSPORT_CHUNKTYPE
UA_StatusCode UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId, UA_Boolean deleteReferences)
#define UA_NS0ID_SERVER_SERVERSTATUS_STARTTIME
#define UA_STATUSCODE_BADCERTIFICATEISSUERTIMEINVALID
void Service_CloseSecureChannel(UA_Server *server, UA_SecureChannel *channel)
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Boolean isAbstract
QueryDataDescription ^^^^^^^^^^^^^^^^^^^^.
#define UA_OPEN62541_VER_MINOR
UA_StatusCode UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_Server *server)
UA_UInt32 receiveBufferSize
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_ResponseHeader responseHeader
#define UA_TYPES_BYTE
Byte ^^^^.
UA_LocalizedText displayName
BrowseNextResponse ^^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
#define UA_NS0ID_BASEOBJECTTYPE
DeleteReferencesItem ^^^^^^^^^^^^^^^^^^^^ A request to delete a node from the server address space...
int32_t UA_Int32
Int32 ^^^^^ An integer value between -2 147 483 648 and 2 147 483 647.
void UA_Session_updateLifetime(UA_Session *session)
#define UA_STATUSCODE_UNCERTAINDOMINANTVALUECHANGED
MonitoredItemCreateResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADSECURECHANNELCLOSED
UA_ConnectionConfig localConf
UA_DateTime UA_DateTime_nowMonotonic(void)
UA_String encryptionAlgorithm
UA_ExpandedNodeId targetId
const UA_String UA_STRING_NULL
#define UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE
UA_ByteString * continuationPoints
UA_UInt32 UA_UInt32_random(void)
#define UA_TYPES_MONITORINGPARAMETERS
ExpandedNodeId ^^^^^^^^^^^^^^ A NodeId that allows the namespace URI to be specified instead of an in...
ParsingResult ^^^^^^^^^^^^^.
UA_UInt16 addNamespace(UA_Server *server, const UA_String name)
#define UA_PRINTF_GUID_FORMAT
Convenience macros for complex types ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
CallMethodRequest ^^^^^^^^^^^^^^^^^.
void Service_DeleteSubscriptions(UA_Server *server, UA_Session *session, const UA_DeleteSubscriptionsRequest *request, UA_DeleteSubscriptionsResponse *response)
UA_UInt32 maxNotificationsPerPublish
#define UA_STATUSCODE_BADPROTOCOLVERSIONUNSUPPORTED
#define UA_STATUSCODE_BADSEQUENCENUMBERUNKNOWN
#define UA_realloc(ptr, size)
UA_RequestHeader requestHeader
#define UA_NS0ID_STATUSCODE
UA_ExpandedNodeId targetNodeId
UA_ByteString serverCertificate
ActivateSessionResponse ^^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
VariableAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a variable node.
#define UA_STATUSCODE_BADSERVERINDEXINVALID
UA_IdType
IdType ^^^^^^ The type of identifier used in a node id.
UA_StatusCode UA_Subscription_removeRetransmissionMessage(UA_Subscription *sub, UA_UInt32 sequenceNumber)
void UA_random_seed(UA_UInt64 seed)
Random Number Generator If UA_ENABLE_MULTITHREADING is defined, then the seed is stored in thread loc...
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADREQUESTTYPEINVALID
#define UA_TYPES_SERVICEFAULT
#define UA_TYPES_APPLICATIONTYPE
UA_StatusCode UA_NodeStore_replace(UA_NodeStore *ns, UA_Node *node)
UA_Boolean deleteSubscriptions
const char * LogLevelNames[6]
UA_ChunkType
ChunkType ^^^^^^^^^ Type of the chunk.
UA_UInt16 serverPicoseconds
UA_ApplicationDescription clientDescription
WriteResponse ^^^^^^^^^^^^^.
SubscriptionAcknowledgement ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Server_delete(UA_Server *server)
UA_Double minimumSamplingInterval
UA_StatusCode UA_Variant_setArrayCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADSYNTAXERROR
#define UA_TYPES_MONITOREDITEMNOTIFICATION
#define UA_STATUSCODE_BADREFERENCENOTALLOWED
UA_CallMethodResult * results
#define UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME
UserIdentityToken ^^^^^^^^^^^^^^^^^ A base type for a user identity token.
UA_StatusCode(* send)(UA_Connection *connection, UA_ByteString *buf)
UA_StatusCode UA_Client_addReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_String targetServerUri, const UA_ExpandedNodeId targetNodeId, UA_NodeClass targetNodeClass)
#define UA_NS0ID_ACTIVATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_DATACHANGETRIGGER
#define UA_STATUSCODE_BADSEQUENCENUMBERINVALID
QueryNextResponse ^^^^^^^^^^^^^^^^^.
UA_NodeAttributesMask
NodeAttributesMask ^^^^^^^^^^^^^^^^^^ The bits used to specify default attributes for a new node...
#define UA_TYPES_VARIABLEATTRIBUTES
UA_BrowsePath * browsePaths
#define UA_NS0ID_DELETEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_Boolean releaseContinuationPoints
#define UA_TYPES_CALLMETHODREQUEST
#define UA_NODEIDTYPE_NUMERIC_FOURBYTE
#define UA_STATUSCODE_BADOUTOFMEMORY
UA_LocalizedText inverseName
UA_Double revisedSamplingInterval
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYACKED
#define UA_NodeStore_newObjectNode()
#define UA_TYPES_CHANNELSECURITYTOKEN
UA_MethodCallback attachedMethod
#define UA_TYPES_BOOLEAN
Boolean ^^^^^^^.
#define UA_STATUSCODE_BADSESSIONNOTACTIVATED
#define UA_STATUSCODE_GOODCOMPLETESASYNCHRONOUSLY
#define SIMPLEQ_REMOVE_HEAD(head, field)
size_t arrayDimensionsSize
#define UA_NS0ID_SERVER_SERVERARRAY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADMAXCONNECTIONSREACHED
UA_MonitoredItem * UA_Subscription_getMonitoredItem(UA_Subscription *sub, UA_UInt32 monitoredItemID)
#define UA_TYPES_BROWSEDESCRIPTION
#define UA_TYPES_CONTENTFILTERELEMENTRESULT
#define UA_STATUSCODE_BADBOUNDNOTSUPPORTED
#define UA_TYPES_REFERENCENODE
#define UA_NODEIDTYPE_NUMERIC_COMPLETE
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOCATIONUNKNOWN
void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *server)
#define UA_STATUSCODE_BADSERVICEUNSUPPORTED
UA_UInt32 maxNotificationsPerPublish
Guid ^^^^ A 16 byte value that can be used as a globally unique identifier.
UA_MessageSecurityMode
MessageSecurityMode ^^^^^^^^^^^^^^^^^^^ The type of security to use on a message. ...
UA_StatusCode UA_Node_copyAnyNodeClass(const UA_Node *src, UA_Node *dst)
String ^^^^^^ A sequence of Unicode characters.
#define UA_STATUSCODE_BADRESOURCEUNAVAILABLE
const UA_Node * UA_NodeStore_get(UA_NodeStore *ns, const UA_NodeId *nodeid)
MonitoringParameters ^^^^^^^^^^^^^^^^^^^^.
#define SIMPLEQ_HEAD(name, type)
UA_DeadbandType
DeadbandType ^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
#define UA_TYPES_MONITOREDITEMMODIFYRESULT
UA_UInt32 monitoredItemId
#define UA_assert(ignore)
#define UA_NS0ID_DELETESUBSCRIPTIONSREQUEST_ENCODING_DEFAULTBINARY
#define SIMPLEQ_INIT(head)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER
void UA_Connection_attachSecureChannel(UA_Connection *connection, UA_SecureChannel *channel)
size_t inputArgumentsSize
UA_StatusCode UA_Server_setObjectTypeNode_lifecycleManagement(UA_Server *server, UA_NodeId nodeId, UA_ObjectLifecycleManagement olm)
UA_NodeId authenticationToken
#define UA_TYPES_VIEWATTRIBUTES
#define UA_STATUSCODE_BADTOOMANYPUBLISHREQUESTS
UA_RequestHeader requestHeader
size_t(* stop)(UA_ServerNetworkLayer *nl, UA_Job **jobs)
UA_UInt32 receiveSequenceNumber
#define UA_STATUSCODE_BADNODELETERIGHTS
#define UA_STATUSCODE_BADPARENTNODEIDINVALID
DeleteMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADEVENTNOTACKNOWLEDGEABLE
UA_StatusCode UA_Connection_completeMessages(UA_Connection *connection, UA_ByteString *message, UA_Boolean *realloced)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_AGGREGATEFUNCTIONS
#define UA_STATUSCODE_BADNONCEINVALID
UA_Boolean UA_NodeId_isNull(const UA_NodeId *p)
void UA_Node_deleteMembersAnyNodeClass(UA_Node *node)
#define UA_TYPES_LOCALIZEDTEXT
LocalizedText ^^^^^^^^^^^^^.
AddReferencesResponse ^^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
const UA_EXPORT UA_ServerConfig UA_ServerConfig_standard
UA_StatusCode(* UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle)
UA_Boolean userExecutable
UA_Double requestedPublishingInterval
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST
UA_ConnectionConfig remoteConf
UA_BrowseResult UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint, const UA_ByteString *continuationPoint)
const UA_Node * getNodeType(UA_Server *server, const UA_Node *node)
#define UA_TYPES_RESPONSEHEADER
UA_StatusCode UA_Server_run_shutdown(UA_Server *server)
#define UA_STATUSCODE_BADIDENTITYTOKENREJECTED
#define UA_NODE_VARIABLEATTRIBUTES
#define UA_STATUSCODE_BADSESSIONCLOSED
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOOD
#define UA_STATUSCODE_BADNOTTYPEDEFINITION
#define UA_STATUSCODE_BADNOTHINGTODO
#define UA_NS0ID_REGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_GOODCLAMPED
size_t referencesToAddSize
UA_EXPORT const UA_DataType UA_TRANSPORT[UA_TRANSPORT_COUNT]
struct UA_SecureChannelManager UA_SecureChannelManager
UA_ExpandedNodeId requestedNewNodeId
#define UA_STATUSCODE_BADNOTREADABLE
UA_StatusCode UA_Variant_setScalarCopy(UA_Variant *v, const void *p, const UA_DataType *type)
void UA_SecureChannel_detachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_TYPES_UNREGISTERNODESRESPONSE
void Service_ModifySubscription(UA_Server *server, UA_Session *session, const UA_ModifySubscriptionRequest *request, UA_ModifySubscriptionResponse *response)
UA_UInt32 requestedLifetimeCount
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXHISTORYCONTINUATIONPOINTS
UA_StatusCode typeCheckValue(UA_Server *server, const UA_NodeId *targetDataTypeId, UA_Int32 targetValueRank, size_t targetArrayDimensionsSize, const UA_UInt32 *targetArrayDimensions, const UA_Variant *value, const UA_NumericRange *range, UA_Variant *editableValue)
#define UA_NS0ID_ROOTFOLDER
UA_ResponseHeader responseHeader
UA_StatusCode UA_Client_getEndpoints(UA_Client *client, const char *serverUrl, size_t *endpointDescriptionsSize, UA_EndpointDescription **endpointDescriptions)
int8_t UA_SByte
SByte ^^^^^ An integer value between -128 and 127.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_LOCALEIDARRAY
UA_Boolean UA_NodeId_equal(const UA_NodeId *n1, const UA_NodeId *n2)
#define UA_TYPES_FILTEROPERATOR
#define UA_TYPES_CLOSESECURECHANNELREQUEST
#define UA_NS0ID_SETMONITORINGMODEREQUEST_ENCODING_DEFAULTBINARY
CloseSessionRequest ^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_STATUSCODE_BADCERTIFICATETIMEINVALID
ReadResponse ^^^^^^^^^^^^.
#define UA_STATUSCODE_GOODSUBSCRIPTIONTRANSFERRED
UA_BrowseDirection
BrowseDirection ^^^^^^^^^^^^^^^ The directions of the references to return.
#define UA_NS0ID_DATETIME
WriteRequest ^^^^^^^^^^^^.
const UA_StatusCodeDescription * UA_StatusCode_description(UA_StatusCode code)
UA_StatusCode MonitoredItem_unregisterSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_TYPES_VIEWDESCRIPTION
void UA_NodeStore_delete(UA_NodeStore *ns)
#define UA_TYPES_QUERYFIRSTREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS
#define UA_NS0ID_STRUCTURE
UA_StatusCode parse_numericrange(const UA_String *str, UA_NumericRange *range)
#define UA_STATUSCODE_BADUSERACCESSDENIED
#define UA_STATUSCODE_UNCERTAINNOTALLNODESAVAILABLE
#define UA_NS0ID_SETPUBLISHINGMODEREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode writeValueRankAttribute(UA_Server *server, UA_VariableNode *node, UA_Int32 valueRank, UA_Int32 constraintValueRank)
void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesRequest *request, UA_AddNodesResponse *response)
NodeManagement Service Set This Service Set defines Services to add and delete AddressSpace Nodes and...
UA_StatusCode __UA_Client_addNode(UA_Client *client, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_NodeId *outNewNodeId)
#define UA_STATUSCODE_BADDATAENCODINGUNSUPPORTED
ActivateSessionRequest ^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
#define UA_STATUSCODE_BADCONNECTIONCLOSED
UA_SecureChannel * channel
UA_StatusCode UA_SecureChannel_sendBinaryMessage(UA_SecureChannel *channel, UA_UInt32 requestId, const void *content, const UA_DataType *contentType)
#define UA_STATUSCODE_GOODENTRYINSERTED
#define UA_STATUSCODE_BADCOMMUNICATIONERROR
#define UA_TYPES_STATUSCODE
StatusCode ^^^^^^^^^^.
void UA_SessionManager_deleteMembers(UA_SessionManager *sm)
size_t(* UA_calcSizeBinarySignature)(const void *UA_RESTRICT p, const UA_DataType *contenttype)
#define UA_TYPES_BROWSEDIRECTION
CloseSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_STATUSCODE_BADREQUESTHEADERINVALID
#define UA_TYPES_REGISTERNODESREQUEST
#define UA_TYPES_EXTENSIONOBJECT
ExtensionObject ^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES
#define UA_TYPES_UNREGISTERNODESREQUEST
#define PCG32_INITIALIZER
UA_SessionManager sessionManager
UA_ResponseHeader responseHeader
UA_UInt32 requestedMaxKeepAliveCount
SetMonitoringModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_UInt32 revisedQueueSize
#define UA_TYPES_BROWSERESULT
ServerStatusDataType ^^^^^^^^^^^^^^^^^^^^.
UA_ByteString serverNonce
void(* releaseSendBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_Connection * closeConnection
#define LIST_FOREACH_SAFE(var, head, field, tvar)
void Service_DeleteReferences(UA_Server *server, UA_Session *session, const UA_DeleteReferencesRequest *request, UA_DeleteReferencesResponse *response)
UA_UInt32 UA_NodeId_hash(const UA_NodeId *n)
void Service_GetEndpoints(UA_Server *server, UA_Session *session, const UA_GetEndpointsRequest *request, UA_GetEndpointsResponse *response)
UA_NodeId referenceTypeId
UA_StatusCode UA_Variant_setRange(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_NumericRange range)
#define UA_STATUSCODE_BADSECURITYMODEINSUFFICIENT
UA_Double revisedSamplingInterval
BrowsePath ^^^^^^^^^^ A request to translate a path into a node id.
#define UA_TYPES_QUERYNEXTRESPONSE
DeleteSubscriptionsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
RelativePathElement ^^^^^^^^^^^^^^^^^^^ An element in a relative path.
#define UA_STATUSCODE_BADSECURITYCHECKSFAILED
UA_LocalizedText displayName
UA_NotificationMessage notificationMessage
UA_FilterOperator
FilterOperator ^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONNOTSHELVED
#define UA_TYPES_MONITOREDITEMCREATERESULT
#define UA_calloc(num, size)
uint8_t UA_Byte
Byte ^^^^ An integer value between 0 and 255.
BrowseResult ^^^^^^^^^^^^ The result of a browse operation.
UA_DateTimeStruct UA_DateTime_toStruct(UA_DateTime t)
void UA_Session_init(UA_Session *session)
#define UA_STATUSCODE_BADMETHODINVALID
#define UA_STATUSCODE_BADSENSORFAILURE
#define UA_STATUSCODE_BADCERTIFICATEREVOCATIONUNKNOWN
void UA_SecureChannel_deleteMembersCleanup(UA_SecureChannel *channel)
#define UA_STATUSCODE_BADFILTEROPERANDCOUNTMISMATCH
#define UA_NS0ID_HASNOTIFIER
#define UA_TYPES_DELETEREFERENCESREQUEST
UA_QualifiedName dataEncoding
UA_UInt32 * subscriptionIds
#define UA_STATUSCODE_BADAGGREGATENOTSUPPORTED
VariableTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^ The attributes for a variable type node.
UA_Boolean hasInnerStatusCode
#define UA_TYPES_NOTIFICATIONMESSAGE
#define UA_TYPES_TIMESTAMPSTORETURN
UA_ReferenceDescription * references
#define UA_STATUSCODE_BADNOSUBSCRIPTION
UA_StatusCode(* getSendBuffer)(UA_Connection *connection, size_t length, UA_ByteString *buf)
CloseSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_TYPES_SECURITYTOKENREQUESTTYPE
UA_AddNodesResult * results
#define UA_STATUSCODE_BADUNEXPECTEDERROR
#define UA_TYPES_DELETESUBSCRIPTIONSREQUEST
#define UA_STATUSCODE_BADWRITENOTSUPPORTED
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SOFTWARECERTIFICATES
UA_Boolean hasAdditionalInfo
UA_ByteString clientNonce
#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG
#define UA_NS0ID_BUILDINFOTYPE
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADWAITINGFORRESPONSE
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
#define UA_TYPES_ANONYMOUSIDENTITYTOKEN
void UA_delete(void *p, const UA_DataType *type)
UA_ServerState
ServerState ^^^^^^^^^^^.
UA_UInt32 * availableSequenceNumbers
#define UA_STATUSCODE_BADUNKNOWNRESPONSE
void UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_NodeId *sessionToken)
GetEndpointsRequest ^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddReferencesRequest *request, UA_AddReferencesResponse *response)
#define UA_NS0ID_HASHISTORICALCONFIGURATION
UA_StatusCode(* UA_copySignature)(const void *src, void *dst, const UA_DataType *type)
void pcg32_srandom_r(pcg32_random_t *rng, uint64_t initial_state, uint64_t initseq)
UA_ExpandedNodeId targetNodeId
UA_Boolean hasServerPicoseconds
#define UA_TYPES_RELATIVEPATHELEMENT
UA_ExtensionObject * notificationData
AddNodesResult ^^^^^^^^^^^^^^ A result of an add node operation.
#define UA_TYPES_DOUBLE
Double ^^^^^^.
#define LIST_INSERT_AFTER(listelm, elm, field)
void(* releaseRecvBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_String securityPolicyUri
UA_ServerNetworkLayer UA_ServerNetworkLayerTCP(UA_ConnectionConfig conf, UA_UInt16 port)
#define UA_STATUSCODE_BADCONTENTFILTERINVALID
CreateSessionResponse ^^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
const UA_ByteString UA_BYTESTRING_NULL
#define UA_STATUSCODE_BADFILTEROPERATORUNSUPPORTED
#define UA_TYPES_BROWSENEXTRESPONSE
UA_NodeClass
NodeClass ^^^^^^^^^ A mask specifying the class of the node.
UA_StatusCode UA_SecureChannelManager_renew(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
UA_UInt32 remainingPathIndex
UA_StatusCode UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst, const UA_NumericRange range)
#define UA_TYPES_INT64
Int64 ^^^^^.
#define UA_NS0ID_AGGREGATES
#define UA_STATUSCODE_BADSOURCENODEIDINVALID
UA_TimestampsToReturn
TimestampsToReturn ^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_EVENTTYPESFOLDER
UA_StatusCode UA_Server_addRepeatedJob(UA_Server *server, UA_Job job, UA_UInt32 interval, UA_Guid *jobId)
Repeated jobs
RegisterNodesRequest ^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a sessi...
size_t nodesToUnregisterSize
EndpointDescription ^^^^^^^^^^^^^^^^^^^ The description of a endpoint that can be used to access a se...
#define UA_BINARY_OVERLAYABLE_FLOAT
Float Endianness ^^^^^^^^^^^^^^^^ The definition UA_BINARY_OVERLAYABLE_FLOAT is true when the floatin...
UA_LocalizedText description
ObjectAttributes ^^^^^^^^^^^^^^^^ The attributes for an object node.
#define UA_NS0ID_SERVER_SERVICELEVEL
#define UA_TYPES_QUERYNEXTREQUEST
#define UA_STATUSCODE_BADTCPSERVERTOOBUSY
#define UA_TYPES_ACTIVATESESSIONRESPONSE
#define UA_TYPES_REQUESTHEADER
UA_DataTypeMember * members
UA_ResponseHeader responseHeader
#define UA_TYPES_UINT16
UInt16 ^^^^^^.
UA_SecureChannel * channel
UA_StatusCode UA_encodeBinary(const void *src, const UA_DataType *type, UA_exchangeEncodeBuffer exchangeCallback, void *exchangeHandle, UA_ByteString *dst, size_t *offset) UA_FUNC_ATTR_WARN_UNUSED_RESULT
#define UA_TYPES_VARIANT
Variant ^^^^^^^.
void UA_SecureChannelManager_cleanupTimedOut(UA_SecureChannelManager *cm, UA_DateTime nowMonotonic)
UA_UInt32 receiveBufferSize
UA_TimestampsToReturn timestampsToReturn
DeleteReferencesResponse ^^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server addre...
#define UA_TYPES_NODECLASS
#define UA_STATUSCODE_GOODOVERLOAD
void(* close)(UA_Connection *connection)
UA_NODE_BASEATTRIBUTES UA_Boolean executable
void UA_Variant_setArray(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADVIEWTIMESTAMPINVALID
void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_CreateSessionResponse *response)
Session Service Set This Service Set defines Services for an application layer connection establishme...
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SERVERPROFILEARRAY
size_t availableSequenceNumbersSize
#define UA_STATUSCODE_BADIDENTITYTOKENINVALID
#define UA_fd_set(fd, fds)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES
struct UA_NotificationMessageEntry UA_NotificationMessageEntry
#define UA_STATUSCODE_BADBROWSEDIRECTIONINVALID
#define UA_STRING_STATIC(s)
#define TAILQ_FOREACH_SAFE(var, head, field, tvar)
#define UA_STATUSCODE_GOODLOCALOVERRIDE
#define SLIST_HEAD(name, type)
#define UA_TYPES_SERVERSTATE
#define LIST_INSERT_HEAD(head, elm, field)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY
MonitoredItemCreateRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
void(* UA_Logger)(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
The signature of the logger.
ModifyMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_SecurityTokenRequestType
SecurityTokenRequestType ^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether a token if being created or renew...
#define UA_NS0ID_HASEVENTSOURCE
UA_UInt32 * monitoredItemIds
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS
#define UA_STATUSCODE_BADSECURITYPOLICYREJECTED
UA_STATIC_ASSERT(sizeof(UA_MessageType)==sizeof(UA_Int32), enum_must_be_32bit)
#define UA_NS0ID_CLOSESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADINVALIDSTATE
#define UA_STATUSCODE_BADCONDITIONALREADYENABLED
#define UA_NS0ID_DIAGNOSTICINFO
#define UA_NS0ID_SERVER_GETMONITOREDITEMS
#define UA_STATUSCODE_BADFILTERLITERALINVALID
#define UA_STATUSCODE_BADARGUMENTSMISSING
#define UA_STATUSCODE_UNCERTAINSUBSTITUTEVALUE
#define UA_STATUSCODE_BADNODATAAVAILABLE
#define UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED
UA_StatusCode Service_AddNodes_existing(UA_Server *server, UA_Session *session, UA_Node *node, const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId, const UA_NodeId *typeDefinition, UA_InstantiationCallback *instantiationCallback, UA_NodeId *addedNodeId)
UA_NodeId referenceTypeId
UA_UInt32 * arrayDimensions
#define UA_TYPES_OBJECTTYPEATTRIBUTES
UA_StatusCode UA_Array_copy(const void *src, size_t size, void **dst, const UA_DataType *type)
#define UA_STATUSCODE_BADATTRIBUTEIDINVALID
UA_Double samplingInterval
UA_MonitoringMode monitoringMode
#define UA_TYPES_CREATESESSIONREQUEST
ContentFilterElementResult ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_BROWSEPATHTARGET
#define UA_TYPES_NODETYPEDESCRIPTION
#define UA_DATETIME_UNIX_EPOCH
#define UA_STATUSCODE_BADINVALIDTIMESTAMP
#define LIST_FOREACH(var, head, field)
void Service_Write(UA_Server *server, UA_Session *session, const UA_WriteRequest *request, UA_WriteResponse *response)
#define UA_TYPES_OBJECTATTRIBUTES
BrowseDescription ^^^^^^^^^^^^^^^^^ A request to browse the the references from a node...
#define UA_NS0ID_BASEVARIABLETYPE
#define UA_NodeStore_newMethodNode()
#define UA_STATUSCODE_BADCERTIFICATEURIINVALID
#define UA_NS0ID_MODELLINGRULETYPE
#define UA_STATUSCODE_BADTCPSECURECHANNELUNKNOWN
#define UA_NS0ID_SERVERSTATUSTYPE
UA_StatusCode UA_Client_deleteNode(UA_Client *client, const UA_NodeId nodeId, UA_Boolean deleteTargetReferences)
#define UA_NS0ID_READREQUEST_ENCODING_DEFAULTBINARY
#define UA_NS0ID_EXPANDEDNODEID
struct session_list_entry session_list_entry
#define UA_RESTRICT
Non-aliasing pointers
#define UA_STATUSCODE_BADFILTEROPERATORINVALID
#define UA_TYPES_QUERYDATADESCRIPTION
void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session, const UA_ModifyMonitoredItemsRequest *request, UA_ModifyMonitoredItemsResponse *response)
int __secs_to_tm(long long t, struct tm *tm)
UA_StatusCode UA_Client_deleteReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
size_t referencesToDeleteSize
#define UA_STATUSCODE_BADCONFIGURATIONERROR
#define UA_STATUSCODE_BADTOOMANYMONITOREDITEMS
UA_UInt32 revisedMaxKeepAliveCount
status(* UA_encodeBinarySignature)(const void *UA_RESTRICT src, const UA_DataType *type)
void Service_RegisterNodes(UA_Server *server, UA_Session *session, const UA_RegisterNodesRequest *request, UA_RegisterNodesResponse *response)
UA_UInt16 binaryEncodingId
size_t arrayDimensionsSize
UA_Boolean userExecutable
UA_SubscriptionAcknowledgement * subscriptionAcknowledgements
void Service_Republish(UA_Server *server, UA_Session *session, const UA_RepublishRequest *request, UA_RepublishResponse *response)
UA_String targetServerUri
UA_UInt32 requestedLifetime
UA_BrowseResult * results
#define UA_NS0ID_MODELLINGRULE_OPTIONAL
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_HASCHILD
union UA_NodeId::@0 identifier
UA_ByteString clientNonce
#define UA_NS0ID_OBJECTTYPESFOLDER
#define UA_TYPES_DATETIME
DateTime ^^^^^^^^.
UA_ReadValueId itemToMonitor
UA_ResponseHeader responseHeader
UA_Client * UA_Client_new(UA_ClientConfig config)
#define UA_STATUSCODE_BADDATATYPEIDUNKNOWN
UA_UsernamePasswordLogin usernamePasswords[2]
#define UA_NS0ID_REPUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_SETPUBLISHINGMODERESPONSE
#define UA_TYPES_MONITORINGMODE
#define UA_TYPES_REFERENCEDESCRIPTION
#define UA_TYPES_ADDREFERENCESREQUEST
UA_DataChangeTrigger
DataChangeTrigger ^^^^^^^^^^^^^^^^^.
#define UA_TYPES_VARIABLETYPEATTRIBUTES
size_t serverEndpointsSize
QueryFirstResponse ^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_APPLICATIONDESCRIPTION
size_t monitoredItemIdsSize
UA_ReadValueId * nodesToRead
UA_MonitoringMode monitoringMode
struct UA_SessionManager UA_SessionManager
UA_ExpandedNodeId targetId
RepublishRequest ^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADTCPNOTENOUGHRESOURCES
#define UA_TYPES_USERTOKENPOLICY
UA_NotificationMessage notificationMessage
#define UA_STATUSCODE_UNCERTAINENGINEERINGUNITSEXCEEDED
#define UA_STATUSCODE_BADFILTERNOTALLOWED
UA_RequestHeader requestHeader
DataChangeNotification ^^^^^^^^^^^^^^^^^^^^^^.
const char * LogCategoryNames[6]
UA_UInt32 sendSequenceNumber
const UA_DataType UA_TYPES[UA_TYPES_COUNT]
#define UA_TYPES_XMLELEMENT
XmlElement ^^^^^^^^^^.
UA_NodeId * nodesToRegister
#define UA_STRING_ALLOC(CHARS)
#define UA_TYPES_DIAGNOSTICINFO
DiagnosticInfo ^^^^^^^^^^^^^^.
#define UA_TYPES_CREATEMONITOREDITEMSREQUEST
#define UA_TYPES_DELETEMONITOREDITEMSRESPONSE
#define UA_STATUSCODE_BADWAITINGFORINITIALDATA
void Service_Browse_single(UA_Server *server, UA_Session *session, struct ContinuationPointEntry *cp, const UA_BrowseDescription *descr, UA_UInt32 maxrefs, UA_BrowseResult *result)
size_t monitoredItemsSize
UA_UInt32 monitoredItemId
#define UA_EMPTY_ARRAY_SENTINEL
PublishResponse ^^^^^^^^^^^^^^^.
UA_RelativePath relativePath
UA_StatusCode __UA_Client_readAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, void *out, const UA_DataType *outDataType)
#define UA_TYPES_CREATEMONITOREDITEMSRESPONSE
UA_NodeId * registeredNodeIds
UA_UserTokenType
UserTokenType ^^^^^^^^^^^^^ The possible user token types.
UA_StatusCode UA_copy(const void *src, void *dst, const UA_DataType *type)
UA_LocalizedText displayName
UA_StatusCode UA_Server_delayedCallback(UA_Server *server, UA_ServerCallback callback, void *data)
#define UA_malloc(_p_size)
UA_Variant * outputArguments
void UA_deleteMembers(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADTYPEDEFINITIONINVALID
UA_UserTokenPolicy * userIdentityTokens
#define UA_STATUSCODE_BADNODATA
BrowseRequest ^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address space...
UA_StatusCode UA_Connection_receiveChunksBlocking(UA_Connection *connection, UA_ByteString *chunks, UA_Boolean *realloced, UA_UInt32 timeout)
#define UA_STATUSCODE_UNCERTAINNOCOMMUNICATIONLASTUSABLEVALUE
UA_StatusCode UA_Server_write(UA_Server *server, const UA_WriteValue *value)
The following node attributes cannot be changed once a node has been created:
#define UA_STATUSCODE_BADFILTEROPERANDINVALID
size_t monitoredItemIdsSize
#define UA_TRANSPORT_TCPMESSAGEHEADER
#define UA_MAXCONTINUATIONPOINTS
NodeTypeDescription ^^^^^^^^^^^^^^^^^^^.
struct UA_DiagnosticInfo UA_DiagnosticInfo
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_REGISTERNODESRESPONSE
#define UA_TYPES_DELETENODESREQUEST
#define UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_UInt32 revisedQueueSize
UA_Double requestedSessionTimeout
UA_ResponseHeader responseHeader
#define UA_TYPES_CALLRESPONSE
#define UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED
#define UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID
#define TAILQ_INSERT_TAIL(head, elm, field)
BrowsePathResult ^^^^^^^^^^^^^^^^ The result of a translate opearation.
#define UA_BUILTIN_TYPES_COUNT
#define UA_STATUSCODE_BADREQUESTTOOLARGE
struct pcg_state_setseq_64 pcg32_random_t
#define UA_TYPES_ENDPOINTDESCRIPTION
OpenSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
#define UA_OPEN62541_VER_PATCH
#define UA_TYPES_NODEATTRIBUTESMASK
#define UA_NS0ID_FOLDERTYPE
#define UA_STATUSCODE_BADNOTWRITABLE
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_Double minimumSamplingInterval
UA_BrowseResult * results
AddReferencesRequest ^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
#define UA_TYPES_QUERYFIRSTRESPONSE
#define UA_STATUSCODE_BADREQUESTNOTALLOWED
#define UA_STATUSCODE_BADDECODINGERROR
#define UA_MSEC_TO_DATETIME
void UA_SecureChannel_attachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_STATUSCODE_BADMAXAGEINVALID
UA_RequestHeader requestHeader
#define UA_TYPES_CONTENTFILTERELEMENT
#define TAILQ_HEAD(name, type)
#define UA_STATUSCODE_BADNOENTRYEXISTS
UA_MessageType
MessageType ^^^^^^^^^^^ Message Type and whether the message contains an intermediate chunk...
#define UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED
UA_Boolean moreNotifications
#define UA_STATUSCODE_BADMONITORINGMODEINVALID
#define UA_TYPES_SETMONITORINGMODEREQUEST
#define UA_TYPES_NODEID
NodeId ^^^^^^.
UA_StatusCode UA_ByteString_allocBuffer(UA_ByteString *bs, size_t length)
size_t endpointDescriptionsSize
ModifySubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
UnregisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
struct UA_Job::@5::@7 methodCall
PublishRequest ^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_NAMESPACEARRAY
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_INPUTARGUMENTS
UA_AsymmetricAlgorithmSecurityHeader serverAsymAlgSettings
MonitoredItemModifyRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADDOMINANTVALUECHANGED
#define SIMPLEQ_INSERT_TAIL(head, elm, field)
#define UA_STATUSCODE_BADEVENTIDUNKNOWN
int64_t UA_Int64
Int64 ^^^^^ An integer value between -9 223 372 036 854 775 808 and 9 223 372 036 854 775 807...
#define UA_TYPES_CREATESUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADNODEIDREJECTED
#define UA_TYPES_EXPANDEDNODEID
ExpandedNodeId ^^^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
CreateMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_CONTENTFILTERRESULT
#define UA_TYPES_DATATYPEATTRIBUTES
void Service_BrowseNext(UA_Server *server, UA_Session *session, const UA_BrowseNextRequest *request, UA_BrowseNextResponse *response)
UA_NodeId referenceTypeId
#define LIST_REMOVE(elm, field)
#define UA_TYPES_BROWSERESULTMASK
#define UA_STATUSCODE_BADAGGREGATEINVALIDINPUTS
#define UA_TRANSPORT_TCPERRORMESSAGE
void Service_SetPublishingMode(UA_Server *server, UA_Session *session, const UA_SetPublishingModeRequest *request, UA_SetPublishingModeResponse *response)
#define UA_TYPES_ADDNODESRESULT
#define UA_PRINTF_STRING_FORMAT
MonitoredItemNotification ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADNODEIDINVALID
BrowsePathTarget ^^^^^^^^^^^^^^^^ The target of the translated path.
const UA_VariableTypeNode * getVariableNodeType(UA_Server *server, const UA_VariableNode *node)
#define UA_NS0ID_SERVERSTATE
ModifySubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYCONFIRMED
ModifyMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Connection_detachSecureChannel(UA_Connection *connection)
#define UA_STATUSCODE_BADSHUTDOWN
#define CHECK_ATTRIBUTES(TYPE)
UA_LocalizedText description
AnonymousIdentityToken ^^^^^^^^^^^^^^^^^^^^^^ A token representing an anonymous user.
#define UA_TYPES_OPENSECURECHANNELRESPONSE
UA_StatusCode(* UA_EditNodeCallback)(UA_Server *, UA_Session *, UA_Node *, const void *)
UA_StatusCode UA_SessionManager_init(UA_SessionManager *sm, UA_Server *server)
#define UA_STATUSCODE_BADCONDITIONALREADYSHELVED
#define UA_NODE_BASEATTRIBUTES
#define UA_NS0ID_CALLREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_COUNT
Every type is assigned an index in an array containing the type descriptions.
LocalizedText ^^^^^^^^^^^^^ Human readable text with an optional locale identifier.
UA_Boolean hasSourceTimestamp
UA_UInt32 revisedLifetimeCount
#define UA_STATUSCODE_BADTCPMESSAGETYPEINVALID
#define UA_TYPES_BUILDINFO
#define UA_TYPES_GETENDPOINTSRESPONSE
UA_ChannelSecurityToken nextSecurityToken
#define UA_STATUSCODE_UNCERTAINLASTUSABLEVALUE
void UA_MoniteredItem_SampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem)
UA_RequestHeader requestHeader
ContentFilterElement ^^^^^^^^^^^^^^^^^^^^.
#define UA_TRANSPORT_SEQUENCEHEADER
#define UA_STATUSCODE_BADCERTIFICATEISSUERUSENOTALLOWED
#define UA_STATUSCODE_BADENDOFSTREAM
UA_StatusCode UA_Server_removeRepeatedJob(UA_Server *server, UA_Guid jobId)
#define UA_TYPES_QUALIFIEDNAME
QualifiedName ^^^^^^^^^^^^^.
UA_LocalizedText displayName
#define UA_NS0ID_BROWSEREQUEST_ENCODING_DEFAULTBINARY